我编写了以下代码,如果用以下方式编写,我发现项目管道不起作用,process_item
(在项目管道中)将不会被执行。
class Spider(scrapy.Spider):
name = “***”
def __init__(self, url='http://example.com/', **kw):
super(Spider,self).__init__(**kw)
self.url = url
self.allowed_domains = [re.sub(r'^www\.', '', urlparse(url).hostname)]
def start_requests(self):
#return [Request(self.url, callback=self.parse, dont_filter=False)]
return [Request(self.url, callback=self.find_all_url, dont_filter=False)]
def find_all_url(self,response):
log.msg('current url: '+response.url, level=log.DEBUG)
if True:
self.parse(response)
def parse(self, response):
dept = deptItem()
dept['deptName'] = response.xpath('//title/text()').extract()[0].strip()
dept['url'] = response.url
log.msg('find an item: '+ str(response.url) +'\n going to return item' , level = log.INFO)
return dept
但是,如果我将start_requests中的回调从self.find_all_url
更改为self.parse
(请参阅注释代码上方),项目管道有效,我会尝试找出原因,但我无法做到。 t,有人可以帮忙吗?
答案 0 :(得分:0)
我发现如果我想以这种方式写作,我需要在函数return
的{{1}}前面添加self.parse(response)
。
但我不是很清楚为什么会这样,我猜这个返回的项目应该最终回到初始请求?
答案 1 :(得分:0)
你可以发布你的设置吗?
您必须在settings.py
中定义管道ITEM_PIPELINES = {
'MySpider.pipelines.SomePipeline': 300,
}