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 10 Python
Python实现将DOC文档转换为PDF的方法
Jul 25 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
python 在指定范围内随机生成不重复的n个数实例
Jan 28 Python
python 数据提取及拆分的实现代码
Aug 26 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
python将音频进行变速的操作方法
Apr 08 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
Python 的 __str__ 和 __repr__ 方法对比
Sep 02 Python
python爬虫快速响应服务器的做法
Nov 24 Python
python 利用百度API识别图片文字(多线程版)
Dec 14 Python
python 爬取天气网卫星图片
Jun 07 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
php cookies中删除的一般赋值方法
2011/05/07 PHP
深入解析php中的foreach函数
2013/08/31 PHP
php 生成短网址原理及代码
2014/01/23 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP的error_reporting错误级别变量对照表
2014/07/08 PHP
PHP实现多维数组转字符串和多维数组转一维数组的方法
2015/08/08 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
PHP strip_tags保留多个HTML标签的方法
2016/05/22 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
HTML5实现微信拍摄上传照片功能
2017/04/21 Javascript
layui多图上传实现删除功能的例子
2019/09/23 Javascript
javaScript把其它类型转换为Number类型
2019/10/13 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
pygame学习笔记(4):声音控制
2015/04/15 Python
Python中的取模运算方法
2018/11/10 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
对Django项目中的ORM映射与模糊查询的使用详解
2019/07/18 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
对tensorflow中的strides参数使用详解
2020/01/04 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
Restful_framework视图组件代码实例解析
2020/11/17 Python
Python编写万花尺图案实例
2021/01/03 Python
美国按摩椅批发网站:Titan Chair
2018/12/27 全球购物
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
培训专员岗位职责
2014/02/26 职场文书
解除劳动合同协议书
2014/09/17 职场文书
安全生产月标语
2014/10/07 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
2014年医务科工作总结
2014/12/18 职场文书
北京天坛导游词
2015/02/12 职场文书
Spring事务管理下synchronized锁失效问题的解决方法
2022/03/31 Java/Android