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 20 Python
python统计一个文本中重复行数的方法
Nov 19 Python
Python对列表排序的方法实例分析
May 16 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python调用adb命令实现对多台设备同时进行reboot的方法
Oct 15 Python
Python unittest工作原理和使用过程解析
Feb 24 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
详解Python流程控制语句
Oct 28 Python
Python的logging模块基本用法
Dec 24 Python
Requests什么的通通爬不了的Python超强反爬虫方案!
May 20 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
一篇不错的PHP基础学习笔记
2007/03/18 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
PHP网站常见安全漏洞,及相应防范措施总结
2021/03/01 PHP
jquery插件orbit.js实现图片折叠轮换特效
2015/04/14 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
如何屏蔽防止别的网站嵌入框架代码
2015/08/24 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
什么是Vue.js框架 为什么选择它?
2017/10/17 Javascript
Vue DevTools调试工具的使用
2017/12/05 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
微信小程序利用Canvas绘制图片和竖排文字详解
2019/06/25 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
python删除过期文件的方法
2015/05/29 Python
python定时器(Timer)用法简单实例
2015/06/04 Python
Python实现自动添加脚本头信息的示例代码
2016/09/02 Python
python基础教程之Filter使用方法
2017/01/17 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
2017/11/22 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
Python 实现将数组/矩阵转换成Image类
2020/01/09 Python
Python 调用有道翻译接口实现翻译
2020/03/02 Python
Html5 canvas实现粒子时钟的示例代码
2018/09/06 HTML / CSS
DHC美国官网:日本通信销售第一的化妆品品牌
2017/11/12 全球购物
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
vue+echarts实现多条折线图
2022/03/21 Vue.js