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中解析XML数据的方法
Oct 15 Python
import的本质解析
Oct 30 Python
Python实现发送与接收邮件的方法详解
Mar 28 Python
解决pandas read_csv 读取中文列标题文件报错的问题
Jun 15 Python
浅谈Python里面小数点精度的控制
Jul 16 Python
PyQt5实现简易计算器
May 30 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
python调用其他文件函数或类的示例
Jul 16 Python
jupyter notebook清除输出方式
Apr 10 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
5款实用的python 工具推荐
Oct 13 Python
详解用 python-docx 创建浮动图片
Jan 24 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/02 国漫
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
yii插入数据库防并发的简单代码
2017/05/27 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
Javascript的一种模块模式
2010/09/08 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
利用js实现遮罩以及弹出可移动登录窗口
2013/07/08 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
Angular.js之作用域scope'@','=','&'实例详解
2017/02/28 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
2017/08/08 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
jQuery实现轮播图效果
2019/11/26 jQuery
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
详解微信小程序「渲染层网络层错误」的解决方法
2021/01/06 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
用python标准库difflib比较两份文件的异同详解
2018/11/16 Python
Python读取csv文件实例解析
2019/12/30 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
2020/09/03 Python
详解Python yaml模块
2020/09/23 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
南京软件公司的.net程序员笔试题
2014/08/31 面试题
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
黄河象教学反思
2014/02/10 职场文书
企业承诺书格式
2014/05/21 职场文书
公证处委托书
2015/01/28 职场文书
教师节联欢会主持词
2015/07/04 职场文书
话题作文之学会尊重
2019/12/16 职场文书
Pygame Draw绘图函数的具体使用
2021/11/17 Python
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL