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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
Python实现大文件排序的方法
Jul 10 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Python中利用xpath解析HTML的方法
May 14 Python
python实现机器学习之元线性回归
Sep 06 Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 Python
Python元组常见操作示例
Feb 19 Python
django 基于中间件实现限制ip频繁访问过程详解
Jul 30 Python
win10环境下配置vscode python开发环境的教程详解
Oct 16 Python
python爬虫筛选工作实例讲解
Nov 23 Python
python神经网络学习 使用Keras进行简单分类
May 04 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
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
php引用和拷贝的区别知识点总结
2019/09/23 PHP
Laravel 实现关系模型取出需要的字段
2019/10/10 PHP
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
jQuery+css实现的tab切换标签(兼容各浏览器)
2016/01/28 Javascript
D3.js实现柱状图的方法详解
2016/09/21 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
移动端Ionic App 资讯上下循环滚动的实现代码(跑马灯效果)
2017/08/29 Javascript
微信小程序时间标签和时间范围的联动效果
2019/02/15 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
python实现多线程采集的2个代码例子
2014/07/07 Python
Python实现partial改变方法默认参数
2014/08/18 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
Django自定义认证方式用法示例
2017/06/23 Python
Python实现句子翻译功能
2017/11/14 Python
python实现发送邮件功能代码
2017/12/14 Python
Django中cookie的基本使用方法示例
2018/02/03 Python
python 中if else 语句的作用及示例代码
2018/03/05 Python
django 单表操作实例详解
2019/07/30 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
Python绘制数码晶体管日期
2021/02/19 Python
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
2014端午节活动策划方案
2014/01/27 职场文书
面试必备的求职信
2014/05/25 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
2015年爱国卫生工作总结
2015/04/22 职场文书
反邪教学习心得体会
2016/01/15 职场文书
教师培训学习心得体会
2016/01/21 职场文书
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server
Spring Boot实现文件上传下载
2022/08/14 Java/Android