scrapy常见问题汇总

  • 多个pipeline管道文件存在时,后面的pipeline获取不到item:
    • 前面的pipeline中process_item方法在最后需要return item。 否则item被丢弃则后续的pipeline无法获取到item
  • 调用scrapyd时报错:sqlite3.OperationalError: attempt to write a readonly database
    • 没有权限,需要增加权限:项目根目录的文件夹dbs,修改其权限和所有者即可。
      • chmod -R 755 dbs
      • chown -R username:usergroup dbs

scrapy常用命令

  • 创建spider:scrapy genspider spider_name site_url
  • 执行spider:scrapy crawl spider_name
  • 接收参数:scrapy crawl spiderName -a parameter1=value1 -a parameter2=value2
  • 递归调用时常用参数:
    • dont_filter:不过滤相同的url请求。当需要重复调用同一url的时候,将此参数设为True,否则相同url的请求会被自动过滤掉,并且没有提示
      • yield scrapy.Request(url=url, callback=self.parse,dont_filter=True)

scrapy提供接口服务

将scrapy发布为服务并提供接口服务,以便其他项目调用:

  • pip install scrapyd
  • pip install scrapyd-client
  • 修改scrapy.cfg:
  • 启动服务:scrapyd

[settings]
default = compass.settings

[deploy]
url = http://localhost:6800/
project = compass[settings]

  • 部署服务:scrapyd-deploy
  • 启动服务:scrapyd
  • 调用服务:curl http://localhost:6800/schedule.json -d project=your_project_name -d spider=your_spider_name
  • 不清楚项目名和爬虫名可以用下面命令查询:
    • 列出项目:curl http://localhost:6800/listprojects.json
    • 列出爬虫:curl http://localhost:6800/listspiders.json?project=compass
  • 其他命令:
    • 调度爬虫
      • curl http://localhost:6800/schedule.json -d project=your_project_name -d spider=your_spider_name
    • 包含参数
      • curl http://localhost:6800/schedule.json -d project=your_project_name -d spider=your_spider_name -d setting=DOWNLOAD_DELAY=2 -d arg1=val1
    • 取消运行
      • curl http://localhost:6800/cancel.json -d project=your_project_name -d job=2bffadcb3218k9abbd23ccf016aa82f02
    • 列出版本
      • curl http://localhost:6800/listversions.json?project=your_project_name
    • 列出job
      • curl http://localhost:6800/listjobs.json?project=your_project_name
    • 删除版本
      • curl http://localhost:6800/delversion.json -d project=your_project_name -d version==15419782769
    • 删除项目
      • curl http://localhost:6800/delproject.json -d project=your_project_name