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文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
django 按时间范围查询数据库实例代码
Feb 11 Python
python opencv之分水岭算法示例
Feb 24 Python
python学生管理系统代码实现
Apr 05 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
解析Python3中的Import
Oct 13 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
python中xlrd模块的使用详解
Feb 01 Python
一行代码python实现文件共享服务器
Apr 22 Python
python中的plt.cm.Paired用法说明
May 31 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的autoload自动加载机制使用说明
2010/12/28 PHP
利用cookie记住背景颜色示例代码
2013/11/04 Javascript
js获得当前时区夏令时发生和终止的时间代码
2014/02/23 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
javascript制作的滑动图片菜单
2015/05/15 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
浅谈jquery上下滑动的注意事项
2016/10/13 Javascript
JQuery中解决重复动画的方法
2016/10/17 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
浅析vue数据绑定
2017/01/17 Javascript
jQuery判断邮箱格式对错实例代码讲解
2017/04/12 jQuery
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
微信小程序 子级页面返回父级并把子级参数带回父级实现方法
2019/08/22 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
Vue router安装及使用方法解析
2020/12/02 Vue.js
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
分享Python文本生成二维码实例
2016/01/06 Python
python requests 使用快速入门
2017/08/31 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
python 消费 kafka 数据教程
2019/12/21 Python
python json load json 数据后出现乱序的解决方案
2020/02/27 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
家长会学生家长演讲稿
2013/12/29 职场文书
情人节活动策划方案
2014/02/27 职场文书
高中语文课后反思
2014/04/27 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Python实现视频自动打码的示例代码
2022/04/08 Python
Python探索生命起源 matplotlib细胞自动机动画演示
2022/04/21 Python