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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python+Wordpress制作小说站
Apr 14 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
Nov 29 Python
教你利用Python玩转histogram直方图的五种方法
Jul 30 Python
浅谈python下含中文字符串正则表达式的编码问题
Dec 07 Python
在Pycharm中对代码进行注释和缩进的方法详解
Jan 20 Python
python实现AES加密和解密
Mar 27 Python
pandas分区间,算频率的实例
Jul 04 Python
Python 求数组局部最大值的实例
Nov 26 Python
pytorch实现从本地加载 .pth 格式模型
Feb 14 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 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实现163、QQ邮箱收发邮件的方法
2015/12/18 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
js 屏蔽鼠标右键脚本附破解方法
2009/12/03 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
js跑步算法的实现代码
2013/12/04 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
2015/03/03 Javascript
JavaScript实现自动变换表格边框颜色
2015/05/08 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
基于JS代码实现导航条弹出式悬浮菜单
2016/06/17 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
使用Python装饰器在Django框架下去除冗余代码的教程
2015/04/16 Python
python中管道用法入门实例
2015/06/04 Python
Python实现线程状态监测简单示例
2018/03/28 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Django 重写用户模型的实现
2019/07/29 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
自学python用什么系统好
2020/06/23 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
小溪流的歌教学反思
2014/02/13 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
道士塔读书笔记
2015/06/30 职场文书
我的生日感言
2015/08/03 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
Redis 哨兵集群的实现
2021/06/18 Redis
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫