环境

  • Mac 10.13.6
  • Python 3.6.4
  • Scrapy 1.5.0

现象

爬虫运行几秒钟就自动停止并报如下错误信息: 记录scrapy的一个小坑之爬虫启动后马上就自动退出

原因

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

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

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

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']就可以让爬虫继续往下爬数据了,亲测可行。