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命名空间详解
Aug 18 Python
python通过定义一个类实例作为ftp回调方法
May 04 Python
python爬取微信公众号文章
Aug 31 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
Python和Go语言的区别总结
Feb 20 Python
Python实现使用request模块下载图片demo示例
May 24 Python
利用python求积分的实例
Jul 03 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
Mar 13 Python
Python脚本如何在bilibili中查找弹幕发送者
Jun 04 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
python raise的基本使用
Sep 10 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/03 日漫
PHP设计模式之代理模式的深入解析
2013/06/13 PHP
在Win2003(64位)中配置IIS6+PHP5.2.17+MySQL5.5的运行环境
2016/04/04 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP使用OB缓存实现静态化功能示例
2019/03/23 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
js DOM模型操作
2009/12/28 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
jquery修改属性值实例代码(设置属性值)
2014/01/06 Javascript
node.js开机自启动脚本文件
2014/12/24 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
javascript中递归函数用法注意点
2015/07/30 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
javascript 实现动态侧边栏实例详解
2016/11/11 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
JavaScript基础之流程控制语句的用法
2017/08/31 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
Python中的函数作用域
2018/05/07 Python
浅谈Python 递归算法指归
2019/08/22 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
《生命的药方》教学反思
2014/04/08 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
励志演讲稿大全
2014/08/21 职场文书
优秀教师推荐材料
2014/12/16 职场文书
实习单位指导教师评语
2014/12/30 职场文书
安全员岗位职责范本
2015/04/11 职场文书
汽车销售助理岗位职责
2015/04/14 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL