python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python scrapy脚本报错问题

python scrapy脚本报错问题及解决

作者:郑德帅

这篇文章主要介绍了python scrapy脚本报错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python scrapy脚本报错

原本一个好好的爬虫脚本,最近运行时突然报错:

报错代码

如下:

  File "e:\python3.7.1\lib\site-packages\scrapy\core\downloader\middleware.py", line 43, in process_request
    defer.returnValue((yield download_func(request=request,spider=spider)))
twisted.web._newclient.ResponseNeverReceived: [<twisted.python.failure.Failure twisted.internet.error.ConnectionDone: Connection was closed cleanly.>]

分析报错

发送的请求未被接受,链接已断开

百度最终定位到是请求头的原因:

原本的请求头的HOST被换了,脚本发起请求时就被拒了,因此把请求头修改就好了

解决scrapy需要批量启动多个脚本问题,scrapy批量运行脚本

问题描述

今天遇到在远程服务器上,os 批量启动时存在启动不了的情况

问题解决

批量启动有好多种方式,但是我个人主要用的有两个,

当第一个无法启动时,测试第二种启动方式 ,可以正常启动;

"""
批量启动
"""
# ------------------- 第一种  ----------------------------------------
import os


os.system("scrapy crawl Nj")
os.system("scrapy crawl Yanc")
os.system("scrapy crawl Hzs")

简单做个记录吧。

第二种,是调用scrapy 系统自带的方式

为了让同一个 Scrapy 项目下面的多个爬虫实现真正的同时运行,我们可以使用 Scrapy 的CrawlerProcess。

它的用法如下:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

settings = get_project_settings()

crawler = CrawlerProcess(settings)
crawler.crawl('爬虫名1')
crawler.crawl('爬虫名2')
crawler.crawl('爬虫名3')
crawler.start()

使用这种方法,可以在同一个进程里面跑多个爬虫。

# --------------------  第二种  ------------------------------------

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

settings = get_project_settings()

crawler = CrawlerProcess(settings)
crawler.crawl('Nj')
crawler.crawl('Yanc')
crawler.crawl('Hzs')
crawler.start()

两种方式都可以实现,scrapy 多个项目的批量启动

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文