(違法行為を容認しているわけではありません。これは教育目的のみです)
Scrapy は Python の最高の Web スクレイピング フレームワークの 1 つで、使いやすく、高速で、機能が満載です。
しかし、複数のページを再帰的にスクレイピングしたい場合はどうなるでしょうか?商品ページなど
最も簡単な方法は、Request 関数に単純なコールバックを追加することです。
これは、Amazon、eBay、Etsy などの商品がリストされている Web サイトをクロールする Scrapy プロジェクト内のコード スニペットです:
def parse(self, response): links = response.css('a.s-item__link::attr(href)').getall() for link in links: yield Request(url=link, callback=self.parse_item) next_page = response.css('a.pagination___next.icon-link::attr(href)').get() if next_page: print('Next page: %s' % next_page) yield Request(url=next_page, callback=self.parse) def parse_item(self, response): title = response.xpath('//h1[@class="x-item-title___mainTitle"]/span/text()').get() price = response.xpath('//span[@id="prcIsum"]/text()').get() yield {'title':title, 'price':price}
まず、次のコード行を使用して、製品ページにリストされている各アイテムのリンクを取得します。
links = response.css('a.s-item__link::attr(href)').getall()
次に、これらの各リンクをループし、ページのソースを取得するリクエストを送信し、parse_item:
へのコールバックを実行します。
for link in links: yield Request(url=link,callback=self.parse_item)
parse_item 関数内で、アイテムのタイトルと価格を取得します。
def parse_item(self, response): title = response.xpath('//h1[@class="x-item-title__mainTitle"]/span/text()').get() price = response.xpath('//span[@id="prcIsum"]/text()').get() yield {'title':title, 'price':price}
コードは次のページへのリンクを取得し、それ自体へのコールバック (つまり、解析関数) でそれをリクエストし、最初からやり直します。
next_page = response.css('a.pagination__next.icon-link::attr(href)').get() if next_page: print('Next page:%s' % next_page) yield Request(url=next_page,callback=self.parse)
ほら、とても簡単です!
Scrapy を使用して製品ページを再帰的にスクレイピングすることは、Request 関数にコールバックを追加するのと同じくらい簡単に実装できます。
以上がScrapy とリクエスト コールバックを使用して Python で商品ページ (Etsy、Amazon、Ebay) をスクレイピングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。