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虚拟环境virtualenv的安装与使用
Sep 21 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
Nov 11 Python
详解关于Django中ORM数据库迁移的配置
Oct 08 Python
pycharm中使用anaconda部署python环境的方法步骤
Dec 19 Python
python交换两个变量的值方法
Jan 12 Python
python画双y轴图像的示例代码
Jul 07 Python
如何基于Python制作有道翻译小工具
Dec 16 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
Django contrib auth authenticate函数源码解析
Nov 12 Python
python DataFrame中stack()方法、unstack()方法和pivot()方法浅析
Apr 06 Python
Python使用mitmproxy工具监控手机 下载手机小视频
Apr 18 Python
Python matplotlib安装以及实现简单曲线的绘制
Apr 26 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
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
2019/08/12 PHP
javascript学习网址备忘
2007/05/29 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jquery仿QQ商城带左右按钮控制焦点图片切换滚动效果
2013/06/27 Javascript
JQuery中$.ajax()方法参数详解及应用
2013/12/12 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
jQuery解决input元素的blur事件和其他非表单元素的click事件冲突问题
2016/08/15 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
浅谈js中的attributes和Attribute的用法与区别
2020/07/16 Javascript
Python中MYSQLdb出现乱码的解决方法
2014/10/11 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
如何高效使用Python字典的方法详解
2017/08/31 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
2018/12/05 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
2020/04/26 Python
python 视频下载神器(you-get)的具体使用
2021/01/06 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
事业单位请假制度
2014/01/13 职场文书
英语教学随笔感言
2014/02/20 职场文书
网吧管理制度范本
2015/08/05 职场文书
vue3中provide && inject的使用
2021/07/01 Vue.js
Win10/Win11 任务栏替换成经典样式
2022/04/19 数码科技