python scrapy框架基如何实现多线程_Python实现在线程里运行scrapy的方法

本文实例讲述了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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样在linux系统上安装r,Linux系统之路——如何在CentOS7.2安装R(示例代码)

使用ubuntu的小伙伴们直接使用命令sudo apt-get installr-base-dev或者r-base搞定。然而对于使用centos的我却一直卡在安装这一步,十分的悲催,只有羡慕的份,但也不至于在linux上使用不上R。办法还是有的,自己总结出两种方法&#…

自定义实现栈的功能

栈的定义:栈是一个数据集合,我们可以吧它理解为是一个只能在一端进行插入或者删除的列表。栈的特点:先进后出 Stack() 建立一个空的栈对象push() 吧一个元素添加到栈的最顶层pop() 删除栈最顶层的元素,并返回这个元素gettop() 取栈…

mybatis循环map的一些技巧

<foreach>标签的用法&#xff1a; 六个参数&#xff1a; collection&#xff1a;要循环的集合 index&#xff1a;循环索引&#xff08;不知道啥用。。&#xff09; item&#xff1a;集合中的一个元素&#xff08;item和collection&#xff0c;按foreach循环理解&#xff…

linux部署node web,nodejs怎么部署到Linux上?

nodejs怎么部署到Linux上&#xff1f;下面本篇文章就来给大家介绍一下在Linux上部署nodejs的方法&#xff0c;希望对大家有所帮助。nodejs部署到Linux上的方法如下&#xff1a;(建议先安装xshell和xftp)1、到nodejs官网下载压缩包(选择合适自己系统的版本)&#xff0c;放到Linu…

python树莓派 是什么_用树莓派和Python给你的植物浇水

我想指出&#xff0c;我绝不是电子学专家。如果你让我制作一个电路图或者解释某件电子产品工作原理的细节&#xff0c;我会一无所知。在生活中&#xff0c;我对电力的工作原理有了基本的了解&#xff0c;我只是胡乱摆弄了一下电子元件就完成了这个工程。话虽如此&#xff0c;当…

htmlspecialchars() 函数过滤XSS的问题

htmlspecialchars()函数的功能如下&#xff1a; htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。 预定义的字符是&#xff1a; & &#xff08;和号&#xff09;成为 &" &#xff08;双引号&#xff09;成为 " &#xff08;单引号&#xff09;成为 …

c语言中 字母对应的数值,C语言编程:求下式中每个字母所代表的数字

编写程序求解下式中各字母所代表的数字&#xff0c;不同的字母代表不同的数字。PEAR- ARA PEA*问题分析与算法设计类似的问题从计算机算法的角度来说是比较简单的&#xff0c;可以采用最常见的穷举方法解决。程序中采用循环穷举每个字母所可能代表的数字&#xff0c;然后将字母…

用mac的python写网络爬虫_在mac下使用python抓取数据

2015已经过去&#xff0c;这是2016的第一篇博文&#xff01; 祝大家新年快乐&#xff01; 但是我还有好多期末考试&#xff01; 还没开始复习&#xff0c;唉&#xff0c;一把辛酸泪&#xff01; 最近看了一遍彦祖的文章叫做 所以自己也想小试牛刀.于是便开始动手写,但初次接触,…

運輸配送信息Delivery_Information

为什么80%的码农都做不了架构师&#xff1f;>>> 運輸配送信息Delivery_Information 金銀倉會選用以下運輸公司&#xff0c;為客戶配送磁磚傢俬潔具&#xff1a; 佛山冠昌達中港運輸&#xff08;散貨或包車&#xff0c;近佛山石灣的磁磚倉庫&#xff0c;近樂從傢俬城…

linux的 dev vdal,RAZVOJ DELA NA DALJAVO V SLOVENIJI

摘要&#xff1a;V diplomskem delu bomo raziskovali razvoj dela na daljavo v Sloveniji. Naš poglavitni cilj je prikazati širjenje teledela v Sloveniji. Drugod po Evropi se že vrsto let uveljavlja tudi ta vrsta opravljanja dela, pri nas pa manj. O tem lah…

Spring+SpringMVC+Mybatis 多数据源整合

原文地址&#xff1a;http://blog.csdn.net/q908555281/article/details/50316137 ----------------------------------- 此篇文章是基于Spring3.0和mybatis3.2的总体大概流程 &#xff1a;1. 拷贝所需jar 2.写一个数据库切换的工具类&#xff1a;DataSourceContextHolder&am…

查看mysql sql执行器优化后的sql

EXPLAIN EXTENDED select s.* from student s where s.sid in ( select sid from sc where sc.cid 0 and sc.score 100); show WARNINGS;

git ssh拉取代码_win10下git初始安装及配置工作

git安装从https://git-scm.com/https://git-scm.com/download/win 中下载安装包&#xff0c;点击exe文件运行&#xff0c;选择安装路径即可安装。git配置初次运行git前的配置&#xff0c;新建文件夹1、 新建一个文件夹&#xff0c;用来存放代码的文件夹---2、 打开文件夹&#…

用ABAP 生成二维码 QR Code

除了使用我的这篇blogStep by step to create QRCode in ABAP Webdynpro提到的使用ABAP webdynpro生成二维码之外&#xff0c;也可以通过使用二维码在线生成网站提供的service来生成二维码。 二维码在线生成网站&#xff1a; www.makepic.com/qrcode.php 在网页上输入要生成的二…

c语言不用第三变量,C语言中几种不用第三变量交换两值的方法

int main(){int a3,b4;int *p(int *)malloc(sizeof(int));*p3;int *q(int *)malloc(sizeof(int));*q4;int a24,b27;printf("***位运算****/n");printf("转换前&#xff1a;%d %d/n",a,b);a^b^a^b;printf("转换后&#xff1a;%d %d/n",a,b);print…

联想m7400pro清零方法_联想打印机怎么清零 联想打印机清零方法【教程】

今天小编为读者挑选出了联想 打印机 部分机型的清零方式&#xff0c;希望阅读完这篇文章能帮助到各位。LJ3010A、LJ3116A、LJ3220A清零方式先点击控制面板上的“联机”按钮&#xff0c;让打印机处于脱机状态&#xff0c;再点击“执行”按钮进行打印。先点击控制面板上的“联机”…

mapperLocations属性通配符的使用

mapperLocations属性通配符的使用 示例&#xff1a; [html] view plaincopy <bean id"sqlSessionFactory" class"org.mybatis.spring.SqlSessionFactoryBean"> <property name"dataSource" ref"dataSource" /> …

c语言中数组名可以与其他变量名相同,C语言初学者入门讲座 第九讲 数组(1)...

C语言初学者入门讲座 第九讲 数组(1)(2007-01-17 11:39:19)数组在程序设计中&#xff0c;为了处理方便&#xff0c;把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中&#xff0c;数组属于构造数据类型。一个数组可以分解为…

pb通过对象名称调用对象_C++ 可调用对象(二)

点击上方“蓝字”&#xff0c;发现更多精彩。本文在前一篇关于函数对象、bind 函数的基础上&#xff0c;对 C 中 lambda不表达式的使用进行总结。lambda01PART定义一个 lambda 表达式表示一个可调用的代码单元&#xff0c;可以理解为是一个未命名的内敛函数。类似任何函数&…

easyui datagrid 表格组件列属性formatter和styler使用方法

明确单元格DOM结构 要想弄清楚formatter和styler属性是怎么工作的&#xff0c;首先要弄清楚datagrid组件内容单元格的DOM接口&#xff0c;注意&#xff0c;这里指的是内容单元格&#xff0c;不包括标题单元格&#xff0c;标题单元格的结构有所区别。我们所有内容单元格的默认DO…