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 多个项目的批量启动
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。