Python实现在线程里运行scrapy的方法


Posted in Python onApril 07, 2015

本文实例讲述了Python实现在线程里运行scrapy的方法。分享给大家供大家参考。具体如下:

如果你希望在一个写好的程序里调用scrapy,就可以通过下面的代码,让scrapy运行在一个线程里。

"""
Code to run Scrapy crawler in a thread - works on Scrapy 0.8
"""
import threading, Queue
from twisted.internet import reactor
from scrapy.xlib.pydispatch import dispatcher
from scrapy.core.manager import scrapymanager
from scrapy.core.engine import scrapyengine
from scrapy.core import signals
class CrawlerThread(threading.Thread):
  def __init__(self):
    threading.Thread.__init__(self)
    self.running = False
  def run(self):
    self.running = True
    scrapymanager.configure(control_reactor=False)
    scrapymanager.start()
    reactor.run(installSignalHandlers=False)
  def crawl(self, *args):
    if not self.running:
      raise RuntimeError("CrawlerThread not running")
    self._call_and_block_until_signal(signals.spider_closed, \
      scrapymanager.crawl, *args)
  def stop(self):
    reactor.callFromThread(scrapyengine.stop)
  def _call_and_block_until_signal(self, signal, f, *a, **kw):
    q = Queue.Queue()
    def unblock():
      q.put(None)
    dispatcher.connect(unblock, signal=signal)
    reactor.callFromThread(f, *a, **kw)
    q.get()
# Usage example below:
 
import os
os.environ.setdefault('SCRAPY_SETTINGS_MODULE', 'myproject.settings')
from scrapy.xlib.pydispatch import dispatcher
from scrapy.core import signals
from scrapy.conf import settings
from scrapy.crawler import CrawlerThread
settings.overrides['LOG_ENABLED'] = False # avoid log noise
def item_passed(item):
  print "Just scraped item:", item
dispatcher.connect(item_passed, signal=signals.item_passed)
crawler = CrawlerThread()
print "Starting crawler thread..."
crawler.start()
print "Crawling somedomain.com...."
crawler.crawl('somedomain.com) # blocking call
print "Crawling anotherdomain.com..."
crawler.crawl('anotherdomain.com') # blocking call
print "Stopping crawler thread..."
crawler.stop()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
python集合类型用法分析
Apr 08 Python
对python打乱数据集中X,y标签对的方法详解
Dec 14 Python
Python企业编码生成系统总体系统设计概述
Jul 26 Python
Python小程序之在图片上加入数字的代码
Nov 26 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
Pytorch中实现只导入部分模型参数的方式
Jan 02 Python
Tensorflow的梯度异步更新示例
Jan 23 Python
python logging 日志的级别调整方式
Feb 21 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
分享一枚pycharm激活码适用所有pycharm版本我的pycharm2020.2.3激活成功
Nov 20 Python
Python中threading库实现线程锁与释放锁
May 17 Python
教你使用TensorFlow2识别验证码
Jun 11 Python
Python实现从脚本里运行scrapy的方法
Apr 07 #Python
Python自定义scrapy中间模块避免重复采集的方法
Apr 07 #Python
Python中用memcached来减少数据库查询次数的教程
Apr 07 #Python
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 #Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 #Python
利用QT写一个极简单的图形化Python闹钟程序
Apr 07 #Python
分析Python编程时利用wxPython来支持多线程的方法
Apr 07 #Python
You might like
PHP form 表单传参明细研究
2009/07/17 PHP
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
php目录拷贝实现方法
2015/07/10 PHP
js form action动态修改方法
2008/11/04 Javascript
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
vue双向绑定简要分析
2017/03/23 Javascript
微信小程序模板(template)使用详解
2018/01/31 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
修复 Django migration 时遇到的问题解决
2018/06/14 Python
在scrapy中使用phantomJS实现异步爬取的方法
2018/12/17 Python
python三大神器之fabric使用教程
2019/06/10 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
优秀英语专业毕业生求职信
2013/11/23 职场文书
语文教学感言
2014/02/06 职场文书
总经理工作职责范文
2014/03/14 职场文书
奥巴马的演讲稿
2014/05/15 职场文书
节约用电标语
2014/06/17 职场文书
《中国梦我的梦》中学生演讲稿
2014/08/20 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
居住证明范文
2015/06/17 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
企业愿景口号
2015/12/25 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript