我是scrapy的新手,我整晚都在试图弄清楚如何在我的项目中使用它。假设我有以下网站: www.amazon.com www.ebay.com www.buydirect.com
我想从不同的网站获取商品(比如电视)的价格。我将如何使用scrapy来做到这一点?我检查了文档,但似乎他们只使用一个站点。谁能告诉我如何使用不同的网站和scrapy来获得网站的标题。
谢谢
我从来没有使用过scrapy(我已经滚动了我自己的网络刮刀以获得更多控制),但它似乎以蜘蛛对象为中心。
因此,大概是为您希望抓取的每个域编写一对BaseSpider和Item的子类。所以你会有:
amazon.com 的 amazon_item 和 amazon_spider;和
用于buydirect.com 的buydirect_item 和buydirect_spider
至于查找页面的标题,scrapy 似乎使用XPath来定义提取位置。如果您想查找标题,则必须制定 Xpath 查询来搜索标题标签,该标题标签是头标签的子标签。
这些网络商店有 API——应该更容易让您获得必要的数据。
如果您仍然想使用scrapy,请注意:
最好为每个需要抓取的站点/商店设置单独的蜘蛛,将数据传输到数据库中,并在抓取后进行分析/组合。
不过,这里有一个示例,您可以在单个蜘蛛中从 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]