2

このスクレイピー コード スニペットを使用して、データをクロールしたい 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ますか?

4

2 に答える 2

2

私は専門家ではありませんが、最近 Scrapy と Selenium に夢中になりました。以前は、主に urllib2/beautifulsoup/regex/mechanize を使用して perl と python でハードコアをスクレイピングしていましたが、ソースからデータを取得せずに ajax を多用しているサイトという、対処が不可能だと感じたサイトに出くわしました。投稿リクエストパラメータをマスキングしても壊れないサイトだったので、しばらくの間、スクレイピングの希望と夢をあきらめていました。

少し時間がかかりましたが、今では Webkit で Selenium を使用しています。私はプロのハッカーのように感じます。

実際、私はほとんどのサイトが私を止めることができないと確信しています. ブラウザーを使用してユーザーを完全にエミュレートします。スリープを使用して、ページ ajax が正しく読み込まれるようにします。Amazon のような難しいサイトでは、貪欲にならないでください。ヒットの間隔がランダムになります。何日も問題なくセレンを実行していました。

セレンを調べることをお勧めします。現在、すべてが Ajax を使用しています。

于 2013-01-02T03:50:47.430 に答える