记录scrapy的一个小坑之爬虫启动后马上就自动退出

环境

  • Mac 10.13.6
  • Python 3.6.4
  • Scrapy 1.5.0

现象

爬虫运行几秒钟就自动停止并报如下错误信息:

原因

这其中的原因是在后来再次啃官方文档到
这里时发现的。
原因其实很简单,但我印象中这个问题卡了两天左右,所以就在这里记录一下。
主要是我在执行命令scrapy genspider hnzj 时额外指定了网站域名为hnzj.com也即是scrapy genspider hnzj hnzj.com,于是生成的默认爬虫代码中多了一行
allowed_domains = ['hnzj.com']如下:

1
2
3
4
class HnzjSpider(scrapy.Spider):
name = 'hnzj'
news_item = HezhinewsItem()
allowed_domains = ['hnzj.com']

但是实际上start_request()方法中定义的起始url域名却是hnzj.edu.cn,如下:

1
2
3
4
def start_requests(self):
urls = ['http://www.hnzj.edu.cn/xyxw.htm']
for url in urls:
yield scrapy.Request(url, callback=self.list_page_parser)

由于二者域名不同,所以scrapy就直接自动关闭不再往下爬数据了。

解决

最简单除暴的办法是直接删除掉allowed_domains = ['hnzj.com']这一行,当然也可以改成['hnzj.edu.cn']就可以让爬虫继续往下爬数据了,亲测可行。

Author: Sharp
Link: http://sharpgan.com/2018/12/21/why-scrapy-spider-closed-automatically/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
支付宝打赏
微信打赏