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使用urllib模块和pyquery实现阿里巴巴排名查询
Jan 16 Python
Python类的专用方法实例分析
Jan 09 Python
举例讲解Python中字典的合并值相加与异或对比
Jun 04 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
浅析python中的分片与截断序列
Aug 09 Python
一个Python最简单的接口自动化框架
Jan 02 Python
在CMD命令行中运行python脚本的方法
May 12 Python
Python使用ConfigParser模块操作配置文件的方法
Jun 29 Python
Python安装与基本数据类型教程详解
May 29 Python
用python生成与调用cntk模型代码演示方法
Aug 26 Python
Python ATM功能实现代码实例
Mar 19 Python
基于python实现复制文件并重命名
Sep 16 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中批量替换文件名的实现代码
2011/07/20 PHP
PHP串行化与反串行化实例分析
2016/12/27 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
jquery如何获取元素的滚动条高度等实现代码
2015/10/19 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
JavaScript条件判断_动力节点Java学院整理
2017/06/26 Javascript
基于bootstrop常用类总结(推荐)
2017/09/11 Javascript
详解如何使用PM2将Node.js的集群变得更加容易
2017/11/15 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
vue 自定义右键样式的实例代码
2019/11/06 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
python实现装饰器、描述符
2018/02/28 Python
详解Python是如何实现issubclass的
2019/07/24 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
如何定义TensorFlow输入节点
2020/01/23 Python
Python 如何在字符串中插入变量
2020/08/01 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
体育运动口号
2014/06/09 职场文书
机关作风建设心得体会
2014/10/22 职场文书
毕业典礼致辞
2015/07/29 职场文书
2016中秋节月饼促销广告语
2016/01/28 职场文书
python小型的音频操作库mp3Play
2022/04/24 Python