ホームページ >バックエンド開発 >Python チュートリアル >Scrapy とリクエスト コールバックを使用して Python で商品ページ (Etsy、Amazon、Ebay) をスクレイピングする方法

Scrapy とリクエスト コールバックを使用して Python で商品ページ (Etsy、Amazon、Ebay) をスクレイピングする方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-06 10:58:02681ブラウズ

How to Scrape Product Pages(Etsy, Amazon, Ebay) in Python Using Scrapy and Request Callbacks

(違法行為を容認しているわけではありません。これは教育目的のみです)

導入

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。