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 list使用示例 list中找连续的数字
Jan 27 Python
Python函数参数类型*、**的区别
Apr 11 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
python实现图像识别功能
Jan 29 Python
python pandas实现excel转为html格式的方法
Oct 23 Python
python进程间通信Queue工作过程详解
Nov 01 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 Python
python实现梯度法 python最速下降法
Mar 24 Python
Python制作动态字符画的源码
Aug 04 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.ini中文版
2006/10/09 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
thinkphp5引入公共部分header、footer的方法详解
2018/09/14 PHP
一个很简单的办法实现TD的加亮效果.
2006/06/29 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
js特效,页面下雪的小例子
2013/06/17 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
javascript监听鼠标滚轮事件浅析
2014/06/05 Javascript
JavaScript统计网站访问次数的实现代码
2015/11/18 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
vue实现表格增删改查效果的实例代码
2017/07/18 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
动态内存分配导致影响Javascript性能的问题
2018/12/18 Javascript
在vue中实现嵌套页面(iframe)
2020/07/30 Javascript
element-ui中dialog弹窗关闭按钮失效的解决
2020/09/22 Javascript
django使用xlwt导出excel文件实例代码
2018/02/06 Python
python字符串与url编码的转换实例
2018/05/10 Python
浅谈对pytroch中torch.autograd.backward的思考
2019/12/27 Python
利用python实现后端写网页(flask框架)
2021/02/28 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
基于HTML5实现类似微信手机摇一摇功能(计算摇动次数)
2017/07/24 HTML / CSS
教你使用Canvas处理图片的方法
2017/11/28 HTML / CSS
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
五年级科学教学反思
2014/02/05 职场文书
2014年居委会工作总结
2014/12/09 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
2015年市场营销工作总结
2015/07/23 职场文书
springboot+WebMagic+MyBatis爬虫框架的使用
2021/08/07 Java/Android
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL