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 爬取微信文章
Jan 30 Python
详解Python设计模式编程中观察者模式与策略模式的运用
Mar 02 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
使用Scrapy爬取动态数据
Oct 21 Python
python中实现控制小数点位数的方法
Jan 24 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
Python 项目转化为so文件实例
Dec 23 Python
解决Pycharm的项目目录突然消失的问题
Jan 20 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 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
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
使用一个for循环将N*N的二维数组的所有值置1实现方法
2017/05/29 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
JS与框架页的操作代码
2010/01/17 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
javascript实现div的显示和隐藏的小例子
2013/06/25 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
JS实现的简洁二级导航菜单雏形效果
2015/10/13 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
AngularJS基于http请求实现下载php生成的excel文件功能示例
2018/01/23 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
JavaScript实现密码强度实时验证
2020/03/18 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python使用functools模块中的partial函数生成偏函数
2016/07/02 Python
Python实现针对中文排序的方法
2017/05/09 Python
python traceback捕获并打印异常的方法
2018/08/31 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
让IE可以变相支持CSS3选择器
2010/01/21 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
毕业自我评价范文
2013/11/17 职场文书
《手指教学》反思
2014/02/14 职场文书
大宝sod蜜广告词
2014/03/21 职场文书
《谁的本领大》教后反思
2014/04/25 职场文书
英文推荐信格式范文
2014/05/09 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
格林童话读书笔记
2015/06/30 职场文书
毕业季聚会祝酒词!
2019/07/04 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python