部署 Scrapy 项目时可能会遇到一些常见问题。以下是几个常见的部署问题及其解决方案:

1、依赖问题

问题:部署后爬虫运行失败,通常是由于缺少依赖库。

2、配置问题

问题:爬虫在部署环境中无法正常运行,可能是由于配置文件错误或缺失。

Scrapy 项目部署问题及解决方案_配置文件

3、数据库连接问题

问题:爬虫运行时无法连接数据库。

4、存储和日志问题

问题:数据存储或日志记录出现问题。

5、定时任务和调度

问题:爬虫任务未按预期调度或运行。

6、错误处理

问题:爬虫在运行时遇到错误或异常。

7资源限制

问题:爬虫运行时受限于内存或 CPU 资源。

一、问题背景

  • 项目名称:dirbot
  • 项目路径:/var/www/api/scrapy/dirbot
  • 使用版本:Scrapy 0.16.3
  • Scrapyd 部署:aptitude install scrapyd-0.16

用户在项目目录中使用 scrapy deploy 命令尝试部署项目时遇到以下错误:

/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 项目的关键。根据具体问题调整配置和环境,确保爬虫能够稳定运行。