Docker python3.7+Scrapy1.5+Scrapyd+Scrapyd-client部署爬虫踩坑记

基于python3.7在docker hub上的官方镜像

在基于debain的官方python3.7的镜像用dockerfile安装了scrapy、scrapyd、scrapyd-client。

1. ...in from_crawler spider = cls(*args, **kwargs) TypeError: __init__() got an unexpected keyword argument '_job'

在win用pycharm运行正常,在容器中直接用scrapy命令行运行正常,用scrapyd 调度执行就报错。

原因: 我自己在每一个spider中 复写了 __init__ 方法,并且参数 跟  scrapy/spider/__init__.py的参数不同。

解决办法: 参数改成和父类__init__ 一样的,并且删除scrapyd多传的_job 参数,然后重新部署。

def __init__(self, name=None, **kwargs):
        kwargs.pop('_job', None)
        super().__init__(name, **kwargs)

2. 爬虫一旦有修改,必须用scrapyd-client 发布新版本

3. 发布 : scrapy-deploy 主机名  -p 项目名  --version  数字(可以小数) 

例子 项目配置文件scrapy.cfg如下:

[settings]
default = pro.settings

[deploy:name] 
url = http://192.168.0.111:6800/
project = suibian 

发布:

scrapyd-deploy name -p lalala --version 1

最终在 http://localhost:6800 看到的项目名称就是 lalala, scrapyd-deploy后面的name 对应 配置文件里面的 [deploy:name] 这个在统一服务器上部署多爬虫的时候有用,用docker的话,一个容器就部署一个。

扫描二维码关注公众号,回复: 10233880 查看本文章
发布了87 篇原创文章 · 获赞 58 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/benpaodelulu_guajian/article/details/86485148