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异步回调机制实现和使用方法
Nov 26 Python
pyside写ui界面入门示例
Jan 22 Python
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
Nov 19 Python
浅析Python基础-流程控制
Mar 18 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
Aug 24 Python
pygame游戏之旅 添加游戏暂停功能
Nov 21 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
django删除表重建的实现方法
Aug 28 Python
基于Tensorflow:CPU性能分析
Feb 10 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
python运算符之与用户交互
Apr 13 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_MySQL教程-第一天
2007/03/18 PHP
PHP IN_ARRAY 函数使用注意事项
2010/07/24 PHP
调试一段PHP程序时遇到的三个问题
2012/01/17 PHP
ThinkPHP中的常用查询语言汇总
2014/08/22 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
php使用GD2绘制几何图形示例
2017/02/15 PHP
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
node.js中的buffer.length方法使用说明
2014/12/14 Javascript
js判断出两个字符串最大子串的函数实现方法
2016/11/01 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
Linux系统中利用node.js提取Word(doc/docx)及PDF文本的内容
2017/06/17 Javascript
Angular排序实例详解
2017/06/28 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
vue接通后端api以及部署到服务器操作
2020/08/13 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
python 查找字符串是否存在实例详解
2017/01/20 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
django多对多表的创建,级联删除及手动创建第三张表
2019/07/25 Python
python线程信号量semaphore使用解析
2019/11/30 Python
Django分组聚合查询实例分享
2020/04/29 Python
Python selenium使用autoIT上传附件过程详解
2020/05/26 Python
python pymysql库的常用操作
2020/10/16 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
20年同学聚会感言
2014/02/03 职场文书
服装店员工管理制度
2015/08/07 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript