使用scrapy从不同的站点提取信息

时间:2013-07-10 00:34:30

标签: python scrapy

我是scrapy的新手,我花了一整夜的时间试图弄清楚如何将它用于我的项目。 假设我有以下网站: www.amazon.com www.ebay.com www.buydirect.com

我希望从不同的网站获得一个项目(比如电视)的价格。我怎么用scrapy呢?我检查了文档,但似乎他们只使用了一个网站。任何人都可以告诉我如何使用scrapy的不同网站甚至可以说出网站的标题。

由于

2 个答案:

答案 0 :(得分:1)

我从未使用过scrapy(我已经使用自己的web-scraper进行更多控制)但是它似乎以spider objects为中心。

因此,据推测,可能会为您希望抓取的每个域编写一对BaseSpiderItem的子类。所以你有:

amazon_item和amazon_spider for amazon.com;和

buydirect_item和buydirect_spider for buydirect.com

至于查找页面的标题,scrapy似乎使用XPath来定义提取位置。如果要查找标题,则必须制定Xpath查询以搜索标题标记,该标记标记是头标记的子标记。

答案 1 :(得分:1)

这些网上商店有API - 应该更容易获得必要的数据。

如果您还想使用scrapy,请注意:

  • 这些网站中的每一个都有不同的html内容和加载机制 - 它意味着不同的解析规则,每个网站的策略
  • 对于您要查找的每件商品,您将获得多个结果和价格
  • 您可能需要处理基于ajax的分页

对于每个需要抓取的网站/商店,将数据传输到数据库并在抓取后进行分析/合并,最好有单独的蜘蛛。

尽管如此,这里有一个例子,你可以在一个蜘蛛中获得亚马逊和ebay的游戏。注意allowed_domainsstart_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]