我是scrapy的新手,我花了一整夜的时间试图弄清楚如何将它用于我的项目。 假设我有以下网站: www.amazon.com www.ebay.com www.buydirect.com
我希望从不同的网站获得一个项目(比如电视)的价格。我怎么用scrapy呢?我检查了文档,但似乎他们只使用了一个网站。任何人都可以告诉我如何使用scrapy的不同网站甚至可以说出网站的标题。
由于
答案 0 :(得分:1)
我从未使用过scrapy(我已经使用自己的web-scraper进行更多控制)但是它似乎以spider objects为中心。
因此,据推测,可能会为您希望抓取的每个域编写一对BaseSpider和Item的子类。所以你有:
amazon_item和amazon_spider for amazon.com;和
buydirect_item和buydirect_spider for buydirect.com
至于查找页面的标题,scrapy似乎使用XPath来定义提取位置。如果要查找标题,则必须制定Xpath查询以搜索标题标记,该标记标记是头标记的子标记。
答案 1 :(得分:1)
这些网上商店有API - 应该更容易获得必要的数据。
如果您还想使用scrapy,请注意:
对于每个需要抓取的网站/商店,将数据传输到数据库并在抓取后进行分析/合并,最好有单独的蜘蛛。
尽管如此,这里有一个例子,你可以在一个蜘蛛中获得亚马逊和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]