2016-09-10 9 views
0

私はflipkart.comを掻き集めようとしました(60の製品を表示するカテゴリをランダムに開きました)。1ページに記載された製品情報のためのecommウェブサイトを掻き立てる

ただし、すべてのリンクを検索したときにBeautifulSoupを使用すると、各商品を指し示すリンクが表示されませんでした。私は37のリンクを得ていませんでしたが、いずれも製品の説明ページを指していませんでした....

import requests 
from bs4 import BeautifulSoup 

# a random product listing page 
url='https://www.flipkart.com/search?q=mobile&sid=tyy/4io&as=on&as-show=on&otracker=start&as-pos=1_1_ic_mobile'  

r=requests.get(url) 

soup=BeautifulSoup(r.text,from_encoding="utf-8") 
links=soup.find_all('a') 

リンクtoproduct descrtiptionページ以外のすべてのリンクを指定しました。

+1

返される最初のURLに 'data-reactid'が返されます –

答えて

0

私はそれを理解しています(警告、私はノブです):通常のブラウザで問題のページを開くと、ページにjavascriptがあり、処理するとブラウザがドキュメントに追加するHTMLが追加されますあなたを示しています。リクエストモジュールを使用してページhtmlを取得すると、このjavascriptは処理されないため、この余分なコンテンツは取得されません。あなたが望む情報はこの欠けている内容に含まれています。だから、このスレッドからのコードに基づいて

Web-scraping JavaScript page with Python

import sys 
from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
from PyQt4.QtWebKit import * 
from bs4 import BeautifulSoup 


# Take this class for granted.Just use result of rendering. 
class Render(QWebPage): 
    def __init__(self, url): 
     self.app = QApplication(sys.argv) 
     QWebPage.__init__(self) 
     self.loadFinished.connect(self._loadFinished) 
     self.mainFrame().load(QUrl(url)) 
     self.app.exec_() 

    def _loadFinished(self, result): 
     self.frame = self.mainFrame() 
     self.app.quit() 


url = 'https://www.flipkart.com/search?q=mobile&sid=tyy/4io&as=on&as-show=on&otracker=start&as-pos=1_1_ic_mobile' 
r = Render(url) 
result = r.frame.toHtml() 
soup = BeautifulSoup(result, 'lxml') 
links = soup.find_all('div', {'class': 'col col-7-12'}) 
target_links = [link.parent.parent.parent for link in links] 
for link in target_links: 
    try: 
     print(link.find('a')['href']) 
    except TypeError: # we caught unwanted links in the find_all 
     pass 

私は私がリンクに操縦方法を改善することができると確信しています。

関連する問題