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 相关文章推荐
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
Nov 18 Python
python如何对实例属性进行类型检查
Mar 20 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python接口测试结果集实现封装比较
May 01 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
Feb 19 Python
详解使用scrapy进行模拟登陆三种方式
Feb 21 Python
python Tkinter的简单入门教程
Apr 11 Python
十个Python自动化常用操作,即拿即用
May 10 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
php生成固定长度纯数字编码的方法
2015/07/09 PHP
php fread读取文件注意事项
2016/09/24 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
jQuery实用技巧必备(上)
2015/11/02 Javascript
js实现随机点名小功能
2017/08/17 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
webpack打包js的方法
2018/03/12 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
小程序自定义模板实现吸顶功能
2020/01/08 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
Python入门篇之文件
2014/10/20 Python
Python中if __name__ == '__main__'作用解析
2015/06/29 Python
Python实现SVN的目录周期性备份实例
2015/07/17 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
Python面向对象程序设计OOP深入分析【构造函数,组合类,工具类等】
2019/01/05 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
python批量处理文件或文件夹
2020/07/28 Python
python将dict中的unicode打印成中文实例
2020/05/11 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
2014自主招生自荐信策略
2014/01/27 职场文书
机电职业生涯规划书范文
2014/03/08 职场文书
演讲稿祖国在我心中
2014/05/04 职场文书
优秀管理者事迹材料
2014/05/22 职场文书
红与黑读书笔记
2015/06/29 职场文书
2019思想汇报范文
2019/05/21 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
2022/01/18 PostgreSQL