有一次爬医书的时候有一个函数不会被执行,找了半天没有找到问题所在,只知道是上一个scrapy.Request
执行完并没有正确的触发接下来的函数,根据查找的信息应该是由于scrapy自带的去重机制将我的请求给抛弃了。
参考:https://blog.csdn.net/qq_32670879/article/details/85042464
问题来源:我在爬取医书的时候因为是书籍所以存在章节信息,在书籍的介绍页既有书籍简介,又有目录,我想要写两个函数来分别处理,当书籍简介获取完之后要进入获取目录信息函数的时候不能正确进入。
经过在网上查找信息发现应该是我调用下面函数的时候,因为又请求了之前请求过的response.url
导致scrapy自带的去重机制将本次请求全部拦截了。
1 | yield scrapy.Request(response.url, callback=self.chapterList, meta={'bookName': item['name']}) |
解决方法:在函数参数中加入dont_filter=True
,结果如下
1 | yield scrapy.Request(response.url, callback=self.chapterList, meta={'bookName': item['name']}, dont_filter=True) |