Scrapy实现动态调试和同时启动多个爬虫

标签: 爬虫 调试
28人阅读 评论(0) 收藏 举报
分类:

我的博客原文链接


一般启动方式

scrapy crawl spider_name

命令行启动好处是灵活方便, 可以通过传递参数的形式控制爬虫的行为和输出。

参见官方文档

比如你可以配置爬虫采集到数据的输出方式:

scrapy crawl dmoz -o items.json

但是它的缺点也很明显:

  • 原子性太强,不方便动态调试代码
  • 当需要启动多个爬虫时,不方便操作

新的思路

我们知道Scrapy是基于Twisted实现的爬虫框架, 因此我们可以通过引入reactor来启动我们的爬虫。

为了方便理解,我把的项目结构展示出来:

.
├── learn_scrapy
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── settings.py
│   └── spiders
│       ├── __init__.py
│       └── test.py
├── debug.py
└── scrapy.cfg

我在项目根目录下新建了文件 debug.py

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
from twisted.internet import reactor
from scrapy.crawler import CrawlerRunner
from scrapy.utils.project import get_project_settings
from scrapy.utils.log import configure_logging
# 引入spider
from learn_scrapy.spiders.test import TestSpider
import logging


logger = logging.getLogger(__name__)

settings = get_project_settings()
configure_logging(settings)
runner = CrawlerRunner(settings)


def start_spider():
    # 装载爬虫
    runner.crawl(TestSpider)
    # 如果有多个爬虫需要启动可以一直装载下去
    # runner.crawl(TestSpider2)
    # runner.crawl(TestSpider3)
    # runner.crawl(TestSpider4)
    # ... ...

    # 爬虫结束后停止事件循环
    d = runner.join()
    d.addBoth(lambda _: reactor.stop())

    # 启动事件循环
    reactor.run()


def main():
    start_spider()


if __name__ == '__main__':
    main()

运行这个文件python3 debug.py就可以启动爬虫。

动态调试

在IDE下选择启动debug:

可以看到程序停在了断点处,可以很方便的查看程序运行时的堆栈和变量信息:

查看评论

同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)

http://www.cnblogs.com/rwxwsblog/p/4578764.html 主题 Scrapy 试想一下,前面做的实验和例子都只有一个spider。然而,现实的...
  • oMingZi12345678
  • oMingZi12345678
  • 2016-05-04 15:49:59
  • 3643

九.scrapy项目下spiders内多个爬虫同时运行

1.运行单个爬虫 from scrapy.cmdline import execute execute(('scrapy,crawl,myspd1,--nolog').split(',')) ...
  • beyond_f
  • beyond_f
  • 2017-07-07 09:51:44
  • 2391

python爬虫scrapy之如何同时执行多个scrapy爬行任务

背景:   刚开始学习scrapy爬虫框架的时候,就在想如果我在服务器上执行一个爬虫任务的话,还说的过去。但是我不能每个爬虫任务就新建一个项目吧。例如我建立了一个知乎的爬行任务,但是我在这个爬行...
  • ff_smile
  • ff_smile
  • 2017-12-22 11:17:09
  • 350

scrapy顺序执行多个爬虫

爬虫的时候写了一个main.py,里面使用下面代码:import sys import os from scrapy.cmdline import execute sys.path.append(os...
  • qq_38072531
  • qq_38072531
  • 2017-10-10 17:32:57
  • 650

Scrapy爬虫(六):多个爬虫组合实例

Scrapy爬虫(六):多个爬虫组合实例Scrapy爬虫六多个爬虫组合实例 需求分析 创建项目 运行爬虫 本章将实现多个爬虫共同工作的实例。 需求分析我们现在有这么个需求,既要爬取音乐详情又要爬取...
  • yancey_blog
  • yancey_blog
  • 2016-12-27 14:07:36
  • 8325

关于SCRAPY运行多个SPIDER的问题

最近在写爬取新闻的爬虫,但是发现scrapy不支持一次同时启动多个spider,到网上查找了各种资料,可能是版本的问题均不得法。 有说用scrapyd来调度scrapy的,也搭建试用了一下scr...
  • humanbeng
  • humanbeng
  • 2017-08-18 13:41:30
  • 1722

python爬虫框架scrapy一次执行多个爬虫文件

在scrapy工程,和spider文件夹同一目录下,创建一个.py文件 import os os.system("scrapy crawl 爬虫1") os.system("scrapy cr...
  • xuqimm
  • xuqimm
  • 2017-09-15 15:12:26
  • 350

windows中同时运行多个scrapy爬虫

1. 在你的Scrapy工程下面新建一个与spiders平级的目录commands:cd path/to/your_projectmkdir commands2. 在commands下面添加一个文件c...
  • manimanihome
  • manimanihome
  • 2016-11-29 23:44:37
  • 685

scrapy定时启动多个爬虫

最近项目需要爬取俩个不同网站的新闻内容,但是又存在同一个表, 所以就需要用到俩个Spider 指向不同的domain 但是 对于新手的我来说 只会通过 scrapy crawl huma...
  • qq_33042187
  • qq_33042187
  • 2018-01-10 14:14:58
  • 221

Scrapy:一次性运行多个Spiders

http://stackoverflow.com/questions/10801093/run-multiple-scrapy-spiders-at-once-using-scrapyd
  • iefreer
  • iefreer
  • 2014-03-07 10:39:12
  • 17005
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 389
    排名: 19万+