我定义了两个执行以下操作的蜘蛛:
蜘蛛A:
这是必要的,因为主页上有一个更多结果按钮,可以生成更多不同产品的链接。
蜘蛛B:
打开文本文件。
抓取各个页面并保存信息。
我正在尝试将两者结合起来并制作crawl-spider
。
主页的URL结构类似于:
http://www.example.com
各个页面的URL结构类似于:
http://www.example.com/Home/Detail?id=some-random-number
文本文件包含将由第二个蜘蛛抓取的此类URL的列表。
我的问题:
如何组合两只蜘蛛,以便制作一只完成刮痧的蜘蛛?
答案 0 :(得分:3)
在回调函数中,您
parse
响应(网页)并返回Item
个对象,Request
个对象或两者的可迭代对象。这些请求还将包含一个回调(可能相同),然后由Scrapy下载,然后由指定的回调处理它们的响应。
所以你真正需要做的是在解析方法中(yuo提取那里的链接,对于每个链接,产生一个新的请求,如:
yield self.make_requests_from_url(http://www.example.com/Home/Detail?id=some-random-number)
self.make_requests_from_url
已在Spider
这样的例子:
class MySpider(Spider):
name = "my_spider"
def parse(self, response):
try:
user_name = Selector(text=response.body).xpath('//*[@id="ft"]/a/@href').extract()[0]
yield self.make_requests_from_url("https://example.com/" + user_name)
yield MyItem(user_name)
except Exception as e:
pass
您可以使用不同的解析功能处理其他请求。通过返回Request
对象并显式指定回调来实现(self.make_requests_from_url
函数调用parse
函数默认值)
Request(url=url,callback=self.parse_user_page)