部署 Scrapy 项目时可能会遇到一些常见问题。以下是几个常见的部署问题及其解决方案:
1、依赖问题
问题:部署后爬虫运行失败,通常是由于缺少依赖库。
2、配置问题
问题:爬虫在部署环境中无法正常运行,可能是由于配置文件错误或缺失。
3、数据库连接问题
问题:爬虫运行时无法连接数据库。
4、存储和日志问题
问题:数据存储或日志记录出现问题。
5、定时任务和调度
问题:爬虫任务未按预期调度或运行。
6、错误处理
问题:爬虫在运行时遇到错误或异常。
7. 资源限制
问题:爬虫运行时受限于内存或 CPU 资源。
一、问题背景
- 项目名称:dirbot
- 项目路径:/var/www/api/scrapy/dirbot
- 使用版本:Scrapy 0.16.3
- Scrapyd 部署:aptitude install scrapyd-0.16
用户在项目目录中使用 scrapy deploy 命令尝试部署项目时遇到以下错误:
代码语言:javascript复制/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/settings/deprecated.py:23: ScrapyDeprecationWarning: You are using the following settings which are deprecated or obsolete (ask scrapy-users@googlegroups.com for alternatives):
BOT_VERSION: no longer used (user agent defaults to Scrapy now)
warnings.warn(msg, ScrapyDeprecationWarning)
Traceback (most recent call last):
File "/usr/local/bin/scrapy", line 5, in <module>
pkg_resources.run_script('Scrapy==0.16.3', 'scrapy')
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 499, in run_script
self.require(requires)[0].run_script(script_name, ns)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 1235, in run_script
execfile(script_filename, namespace, namespace)
File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/EGG-INFO/scripts/scrapy", line 4, in <module>
execute()
File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/cmdline.py", line 131, in execute
_run_print_help(parser, _run_command, cmd, args, opts)
File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/cmdline.py", line 76, in _run_print_help
func(*a, **kw)
File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/cmdline.py", line 138, in _run_command
cmd.run(args, opts)
File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/commands/deploy.py", line 76, in run
f = urllib2.urlopen(req)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 404: Not Found
同时,在使用 scrapy deploy -L scrapyd2 命令列出部署项目时也遇到了同样的错误。
二、解决方案
- 检查项目配置: 确保 scrapy.cfg 配置文件中的 [deploy:scrapyd2] 部分正确,包括 url、username 和 password。
- 检查 Scrapyd 服务: 确保 Scrapyd 服务正在运行,并且可以访问项目所在的目录。
- 检查项目路径: 确保项目路径正确,并且 Scrapyd 服务具有读取该路径的权限。
- 检查 web 服务器配置: 确保 web 服务器正确配置,并且可以访问 Scrapyd 服务的 API。
- 检查项目代码: 确保项目代码中没有语法错误或其他问题,并且项目可以正常运行。
- 检查 Scrapy 版本: 确保 Scrapy 版本与 Scrapyd 服务的版本兼容。
- 检查 python egg: 确保项目中没有使用过时的 python egg,并且已经安装了最新的 python egg。
- 检查 addversion.json 文件: 确保项目中存在 addversion.json 文件,并且该文件具有正确的格式和内容。
- 检查 web 站点的状态: 确保要爬取的 web 站点处于正常状态,并且没有出现 404 错误。
确保所有依赖都安装、配置正确、数据库连接正常、数据存储路径存在,并且有适当的错误处理和资源管理策略,是成功部署 Scrapy 项目的关键。根据具体问题调整配置和环境,确保爬虫能够稳定运行。