2

私はスクレイピーを初めて使用し、プロジェクトでそれを使用する方法を理解しようと一晩中過ごしました。次の Web サイトがあるとします。 www.amazon.com www.ebay.com www.buydirect.com

さまざまなサイトからアイテム(テレビなど)の価格を取得したい。スクレイピーを使用してこれを行うにはどうすればよいですか? ドキュメントを確認しましたが、単一のサイトしか使用していないようです。サイトのタイトルさえも言うために、スクレイピーでさまざまなサイトを使用する方法を誰かに教えてもらえますか。

ありがとう

4

2 に答える 2

1

私はスクレイピーを使用したことはありません (より詳細に制御するために独自の Web スクレイパーをロールバックしました) が、スパイダー オブジェクトを中心にしているようです。

したがって、おそらく、スクレイピングしたいドメインごとにBaseSpiderItemのサブクラスのペアを作成する場合になります。したがって、次のようになります。

amazon.com の amazon_item および amazon_spider。と

buydirect.com の buydirect_item と buydirect_spider

ページのタイトルを見つけることに関しては、scrapy はXPathを使用して抽出場所を定義しているようです。タイトルを見つけたい場合は、head タグの子であるタイトル タグを検索する Xpath クエリを作成する必要があります。

于 2013-07-10T07:01:18.970 に答える
1

これらの Web ストアには API があり、必要なデータを簡単に取得できるはずです。

とにかくスクレイピーを使いたい場合は、次のことに注意してください。

  • これらの Web サイトはそれぞれ、異なる HTML コンテンツと読み込みメカニズムを持っています。つまり、サイトごとに異なる解析ルール、戦略が異なります。
  • 見つけたいすべてのアイテムについて、複数の結果と価格が表示されます
  • ajaxベースのページネーションに対処する必要があるかもしれません

スクレイピングが必要なサイト/ストアごとに個別のスパイダーを用意し、データをデータベースにパイプラインして、クロール後に分析/結合する方が良いようです。

ただし、1 つのスパイダーで amazon と ebay からタイトルを取得する方法の例を次に示します。allowed_domainsおよびstart_urlsが設定されていないことに注意してください。start_requestsメソッドが使用されます。

from scrapy.http import Request
from scrapy.selector import HtmlXPathSelector
from scrapy.spider import BaseSpider


class GoodsSpider(BaseSpider):
    name = 'goods'

    def start_requests(self):
        yield Request(url="http://www.amazon.com", callback=self.parse_amazon)

    def parse_amazon(self, response):
        hxs = HtmlXPathSelector(response)

        print hxs.select('//title/text()').extract()[0]

        yield Request(url="http://www.ebay.com", callback=self.parse_ebay)

    def parse_ebay(self, response):
        hxs = HtmlXPathSelector(response)

        print hxs.select('//title/text()').extract()[0]
于 2013-07-10T07:04:07.857 に答える