基于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的话,一个容器就部署一个。