我目前正在尝试使用scrapy创建一个小型的web抓取原型。我目前的问题与链接提取和跟踪相关。
我试图让scrapy浏览页面并找到指向页面的链接(目前不是图像和其他内容),但我不知道如何正确设置参数。
这是我正在使用的蜘蛛:
class DefaultSpider(CrawlSpider):
name = "default"
session_id = -1
rules = [Rule(LinkExtractor(allow=()),callback='parse', follow=True)]
def start_requests(self):
#not relevent code that gives an URL list to be scrawled
for url in listurl:
#make scrapy follow only the current domain url.
self.rules[0].allow=url
yield scrapy.Request(url=url, callback=self.parse)
def parse(self, response):
page = Website(response.url,response.text)
DBInterface.store(page)
蜘蛛似乎在页面中找不到任何链接。我想我做得不对。我尝试将另一个函数作为回调函数,而不是解析方法。(同时修改规则回调参数)
def processlinks (self,response)
page = Website(response.url,response.text)
DBInterface.store(page)
编辑:更新代码+标题以正确理解..
发布于 2017-02-28 18:26:36
CrawlSpider
是一种特殊的爬行器,它添加了rules
支持来跟踪链接(而不是提取链接)。
要让这个爬行器工作,需要can't override start_requests
和parse
方法
关于获取链接,我建议使用LinkExtractor
,它使提取更干净:
来自scrapy
def find_links(self, response):
for link in LinkExtractor().extract_links(response):
logging.info('Extracting new url' + link.url)
yield scrapy.Request(link.url, callback=self.insert_linkDB)
欲了解更多有关LinkExtractor
的最新信息,请访问in the documentation
发布于 2017-05-30 00:38:51
要使CrawlSpider
处理初始URL的方式与随后使用LinkExtractor
提取的URL相同,这有些棘手,这正是您在这里想要的。问题是,您的不应该为您手动发起的任何请求定义自定义回调,因为这将阻止LinkExtractor
工作。另一方面,您希望对每个爬行的URL执行一些操作,包括初始URL。对于那些使用LinkExtractor
提取的URL,您可以在定义规则时提供回调,但这显然不适用于未使用这些规则提取的初始URL。为此,Scrapy提供了另一个方法parse_start_url(response)
,您可以并且应该重写该方法。因此,在您的示例中,以下代码将执行您想要的操作:
class DefaultSpider(CrawlSpider):
name = "default"
session_id = -1
rules = [Rule(LinkExtractor(allow=()),callback='parse_results', follow=True)]
def start_requests(self):
#not relevent code that gives an URL list to be scrawled
for url in listurl:
#make scrappy follow only the current domain url.
self.rules[0].allow=url
yield scrapy.Request(url=url)
def parse_start_url(self, response):
self.parse_results(response)
def parse_results(self, response):
page = Website(response.url,response.text)
DBInterface.store(page)
https://stackoverflow.com/questions/42514918
复制相似问题