このスクレイピー コード スニペットを使用して、データをクロールしたい Web サイトの JavaScript コードをレンダリングしています。このサイトは動画検索エンジンで、検索結果は JavaScript によって表示されます。次のページのリンクをたどり、検索されたアイテム全体をスクラップしたい。以下は私のスパイダーコードです:
class VideoSpider(BaseSpider):
name = "VideoSpider"
allowed_domains = ["domain.com"]
start_urls = ['video search results link']
def parse(self, response):
hxs = HtmlXPathSelector(response)
video_items = hxs.select("//ul[@id='results-list']/li[@class='result']")
#items = []
for vi in video_items:
item = VideoItem()
link = vi.select("a[@class='result-link']/@href").extract()[0]
title = vi.select("a[@class='result-link']/@title").extract()[0]
#print title,link
item['title'] = title
item['url'] = link
yield item
next_page = hxs.select("//div[@id='page']/a")
for np in next_page:
next_url = np.select("@href").extract()
if next_url:
url = urlparse.urljoin(response.url, next_url[0])
#url = response.url, str(next_page)
self.log("find next page url: %s"%url, log.INFO)
yield Request(url, callback=self.parse)
のリンクstart_urls
が正しくダウンロードされ、次のように適切にレンダリングされていることがわかりました。
<ul id="results-list" class="clearfix" static="bl=normal">
<li class="result" href="" </li>
<li class="result" href="" </li>
<li class="result" href="" </li>
....
したがって、抽出は最初のページで成功しますが、次のページのリンクがフェッチされると、JavaScript は次のようにレンダリングされません。
<ul id="results-list" class="clearfix" static="bl=normal"></ul>
<div id="loading">trying to load page for you, please be patient</div>
そのため、レンダリングされない結果としてリンクを抽出できないため、スクレイピングが停止しました.なぜresults-list
最初のページは適切にレンダリングされ、2番目のページは正しくレンダリングされないのですか? selenium
の代わりに使用する必要がありwebkit and jswebkit
ますか?