1. ホーム
  2. python

[解決済み] 動的ページのためのscrapyとselenium

2023-02-03 23:07:28

質問

私はscrapyを使用して、ウェブページから製品情報をスクレイピングしようとしています。私のスクレイピングされるウェブページは次のようになります。

  • 10製品でproduct_listページで始まる
  • next" ボタンをクリックすると、次の 10 個の製品がロードされます (url は 2 つのページ間で変更されません)。
  • 私は LinkExtractor を使用して、各製品のリンクを製品ページに追跡し、必要なすべての情報を取得します。

next-button-ajax-callを再現しようとしましたが、うまくいかないので、seleniumを試しています。seleniumのwebdriverは別のスクリプトで実行できるのですが、scrapyとどのように統合すればいいのかわかりません。私のscrapyスパイダーのどこにselenium部分を置くべきですか?

私のスパイダーは以下のようなかなり標準的なものです。

class ProductSpider(CrawlSpider):
    name = "product_spider"
    allowed_domains = ['example.com']
    start_urls = ['http://example.com/shanghai']
    rules = [
        Rule(SgmlLinkExtractor(restrict_xpaths='//div[@id="productList"]//dl[@class="t2"]//dt'), callback='parse_product'),
        ]

    def parse_product(self, response):
        self.log("parsing product %s" %response.url, level=INFO)
        hxs = HtmlXPathSelector(response)
        # actual data follows

どんなアイデアでも歓迎します。ありがとうございます。

どのように解決するのですか?

どのようにサイトをスクレイピングする必要があるか、どのように、どのようなデータを取得したいかによります。

以下は、ebayのページングをどのように追跡するかの例です。 Scrapy + Selenium :

import scrapy
from selenium import webdriver

class ProductSpider(scrapy.Spider):
    name = "product_spider"
    allowed_domains = ['ebay.com']
    start_urls = ['http://www.ebay.com/sch/i.html?_odkw=books&_osacat=0&_trksid=p2045573.m570.l1313.TR0.TRC0.Xpython&_nkw=python&_sacat=0&_from=R40']

    def __init__(self):
        self.driver = webdriver.Firefox()

    def parse(self, response):
        self.driver.get(response.url)

        while True:
            next = self.driver.find_element_by_xpath('//td[@class="pagn-next"]/a')

            try:
                next.click()

                # get the data and write it to scrapy items
            except:
                break

        self.driver.close()

以下は、"selenium spiders"の例です。


また SeleniumScrapy . 場合によっては ScrapyJS ミドルウェア であれば、ページの動的な部分を処理するのに十分です。実際の使い方のサンプルです。