2

我是scrapy的新手,我整晚都在试图弄清楚如何在我的项目中使用它。假设我有以下网站: www.amazon.com www.ebay.com www.buydirect.com

我想从不同的网站获取商品(比如电视)的价格。我将如何使用scrapy来做到这一点?我检查了文档,但似乎他们只使用一个站点。谁能告诉我如何使用不同的网站和scrapy来获得网站的标题。

谢谢

4

2 回答 2

1

我从来没有使用过scrapy(我已经滚动了我自己的网络刮刀以获得更多控制),但它似乎以蜘蛛对象为中心。

因此,大概是为您希望抓取的每个域编写一对BaseSpiderItem的子类。所以你会有:

amazon.com 的 amazon_item 和 amazon_spider;和

用于buydirect.com 的buydirect_item 和buydirect_spider

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

于 2013-07-10T07:01:18.970 回答
1

这些网络商店有 API——应该更容易让您获得必要的数据。

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

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

最好为每个需要抓取的站点/商店设置单独的蜘蛛,将数据传输到数据库中,并在抓取后进行分析/组合。

不过,这里有一个示例,您可以在单个蜘蛛中从 amazon 和 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]
于 2013-07-10T07:04:07.857 回答