Scrapy的callback进入不了回调方法

一、前言

有的时候,Scrapy的callback方法直接被略过了,不去执行其中的回调方法,可能排查好久都排查不出来,我来教大家集中解决方法。

yield Request(url=url, callback=self.parse_detail, cb_kwargs={
    
    'item': item})

二、解决方法

1、url可能被过滤掉了,如果是被scrapy过滤掉了,那就只需要在这个 scrapy.Request() 函数中将参数放入dont_filter=True加入进去。

2、如果发现还是不行,就可能是因为allowed_domains这个赋值的时候赋值的是别的url,其实可以直接把这个注释掉直接不用。

3、仍然无法使用的话,首先那就要看网站协议了,直接在网站中查看输入:https://www.tencent.com/robots.txt 这里就可以看到:

在这里插入图片描述

这里是没有限制的,那么的话按照前两个按照操作就可以正常的回调了

4、如果不行就要打开配置文件settings.py,这里的False表示忽略网站的robots.txt协议,默认为True:

ROBOTSTXT_OBEY = False

把这个设置为False再试下就可以进行回调了。

5、重点来了!!!!如果以下方法还是没有解决问题的话,并且执行日志如下种形式:在这里插入图片描述你有没有想过一种可能,其实你的代码是能正常执行回调函数的!!

你没有看错,你的代码就是对的!!!!那日志里面为什么不出现执行回调函数的信息呢??

原因:程序不是进不了回调方法,是并发数设置的太大,然后页面数量又比较多,Scrapy框架呢又是先把全部页面的请求排到队列中,然后才会去执行回调中的函数,所以前面的日志都是发出请求的日志,只有全部页面都发出请求进入队列之后,才会去爬取数据进入回调方法,所以等久一点就能看到进入回调的日志了。(注意:Scrapy不是先把全部页面的请求排到队列中,然后才会去执行回调中的函数,我这里只是为了方便解释才这么说的,反正大概就是这个意思)

解决方法:如果你认为是进入不了回调方法,并且爬取的页面数量又比较多的话,可以把并发数设置小一点再测试。

在这里插入图片描述

我设置成128之后,完美看到进入回调函数的日志!!

参考文章:https://www.cnblogs.com/zhengxianfa/p/16741295.html

猜你喜欢

转载自blog.csdn.net/qq_47188967/article/details/129755703