from twisted.internet import reactor   # 事件循环(终止条件,所有的socket都已经移除)
from twisted.web.client import getPage # socket对象(如果下载完成,自动从时间循环中移除...)
from twisted.internet import defer     # defer.Deferred 特殊的socket对象 (不会发请求,手动移除)# 1.利用getPage创建socket
# 2.将socket添加到事件循环中
# 3.开始事件循环 (内部发送请求,并接受响应;当所有的socekt请求完成后,终止事件循环)#########################
# 1. 利用getPage创建socket
# #########################
# 1.利用getPage创建socket
# def response(content):
#     print(content)
#
#
# def task():
#     url = "http://www.baidu.com"
#     d = getPage(url)
#     d.addCallback(response)#########################
# 1.利用getPage创建socket
# 2.将socket添加到事件循环中
#########################
# def response(content):
#     print(content)
#
# @defer.inlineCallbacks
# def task():
#     url = "http://www.baidu.com"
#     d = getPage(url)
#     d.addCallback(response)
#     yield d#########################
# 1.利用getPage创建socket
# 2.将socket添加到事件循环中
# 3.开始事件循环(无法自动结束)
#########################
# def response(content):
#     print(content)# @defer.inlineCallbacks
# def task():
#     url = "http://www.baidu.com"
#     d = getPage(url.encode('utf-8'))
#     d.addCallback(response)
#     yield d
#
# def done(*args,**kwargs):
#     reactor.stop()
#
# task()
# reactor.run()
#########################
# 1.利用getPage创建socket
# 2.将socket添加到事件循环中
# 3.开始事件循环(自动结束)
#########################
# def response(content):
#     print(content)
# @defer.inlineCallbacks
# def task():
#     url = "http://www.baidu.com"
#     d = getPage(url.encode('utf-8'))
#     d.addCallback(response)
#     yield d
#
# def done(*args,**kwargs):
#     reactor.stop()
#
# d = task()
# dd = defer.DeferredList([d,])
# dd.addBoth(done)
#
# reactor.run()#########################
# 1.利用getPage创建socket
# 2.将socket添加到事件循环中
# 3.开始事件循环(自动结束)
#########################
# def response(content):
#     print(content)
#
# @defer.inlineCallbacks
# def task():
#     url = "http://www.baidu.com"
#     d = getPage(url.encode('utf-8'))
#     d.addCallback(response)
#     yield d
#     url = "http://www.baidu.com"
#     d = getPage(url.encode('utf-8'))
#     d.addCallback(response)
#     yield d
#
# def done(*args,**kwargs):
#     reactor.stop()
#
# li = []
# for i in range(10):
#     d = task()
#     li.append(d)
# dd = defer.DeferredList(li)
# dd.addBoth(done)# reactor.run()#########################
# 1.利用getPage创建socket
# 2.将socket添加到事件循环中
# 3.开始事件循环(自动结束)
#########################
"""
_close = None
count = 0
def response(content):print(content)global countcount += 1if count == 3:_close.callback(None)@defer.inlineCallbacks
def task():"""每个爬虫的开始:stats_request:return:"""url = "http://www.baidu.com"d1 = getPage(url.encode('utf-8'))d1.addCallback(response)url = "http://www.cnblogs.com"d2 = getPage(url.encode('utf-8'))d2.addCallback(response)url = "http://www.bing.com"d3 = getPage(url.encode('utf-8'))d3.addCallback(response)global _close_close = defer.Deferred()yield _closedef done(*args,**kwargs):reactor.stop()# 每一个爬虫
spider1 = task()
spderd2 = task()
dd = defer.DeferredList([spider1,spderd2])
dd.addBoth(done)reactor.run()
"""

前戏.py

转载于:https://www.cnblogs.com/jintian/p/11439992.html

Scrapy源码剖析前戏之Twisted使用相关推荐

  1. cmd怎么运行http_Scrapy源码剖析(二)Scrapy是如何运行起来的?

    阅读本文大约需要 15 分钟.本文章代码较多,如果手机端阅读体验不好,建议先收藏后在 PC 端阅读. 在上篇文章:Scrapy源码剖析(一)架构概览,我们主要从整体上了解了 Scrapy 的架构和数据 ...

  2. python源码剖析 豆瓣_在数据分析师的分析中豆瓣的书那些值得读

    最近总是有人问我有什么书好推荐看看,特烦.但是看到那么多人问,看来挺多人有这个需求,便想了一下,如何通过数据分析找到值得看的书.通过爬取某个标签例如产品,运营获取对应已经打了标签的书,获取书对应的评分 ...

  3. Mongoose源码剖析:Introduction and Installation

    引言 要剖析Mongoose的源码,首先你得知道它的一些基本情况和特性.并去使用它.本文就是介绍Mongoose是个什么东西?及如何安装和使用?这里假设你知道什么web服务器软件.web服务器使用什么 ...

  4. 【Java集合源码剖析】TreeMap源码剖析

    2019独角兽企业重金招聘Python工程师标准>>> 前言 本文不打算延续前几篇的风格(对所有的源码加入注释),因为要理解透TreeMap的所有源码,对博主来说,确实需要耗费大量的 ...

  5. LinkedList源码剖析

    1. LinkedList简介 LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当作链表来操作外,它还可以当作栈,队列和双端队列来使用. LinkedList同样是非线 ...

  6. LinkedHashMap源码剖析

    1. LinkedHashMap简介 LinkedHashMap是HashMap的子类,与HashMap有着同样的存储结构,但它加入了一个双向链表的头结点,将所有put到LinkedHashmap的节 ...

  7. Swoft 源码剖析 - Swoft 中的注解机制

    作者:bromine 链接:https://www.jianshu.com/p/ef7... 來源:简书 著作权归作者所有,本文已获得作者授权转载,并对原文进行了重新的排版. Swoft Github ...

  8. 《STL源码剖析》学习--6章--_rotate算法分析

     最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. <STL源码剖析>学习--6章--random access ite ...

  9. 《STL源码剖析》学习--6章--power算法分析

    最近在看侯捷的<STL源码剖析>,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下. 6章--power算法分析 书本中的算法如下所示: template <clas ...

最新文章

  1. LeetCode(7.整数反转)JAVA
  2. 多delegate使用
  3. winform在表格中输入一个完整的时间字段_B端交互组件之表格篇
  4. Linux(Centos7)下使用RPM方式安装MySQL5.7
  5. 【Elasticsearch】父子聚合 can‘t specify parent if no parent field has been configured
  6. 【luogu】P1772物流运输(最短路+DP)
  7. 大数据知识可以怎么学习
  8. 6N137中文说明书 光耦资料 6N137资料
  9. Java算法-堆排序
  10. 网络工程师考试常用计算公式汇总
  11. 微信公众号python_微信公共平台框架-python(支持多账号)
  12. 使用AppleScript批量删除Mac中的信息
  13. vue error The code generator has deoptimised the styling exceeds the max of 100KB
  14. 阿里巴巴java开发手册一方库、二方库、三方库都是什么东东
  15. 如何检测android手机是否支持3g网络或者4g网络 源码,iOS中怎么判断当前网络环境是2G/3G/4G/5G/WiFi...
  16. 手把手教你玩转KVM虚拟机--KVM管理虚拟机
  17. java find bug,java-Findbugs contrib:方法从没有历史记录的catch块中抛出替代异常
  18. python实现千牛客服自动回复语_千牛旺旺客服设置自动回复的技巧有哪些?总结性文章来啦...
  19. asd激光粒度仪测试原理是什么解答
  20. CDN降价之后又一大招 阿里云PCDN正式开放申请

热门文章

  1. 3A简介(持续更新)
  2. WGS84(GPS)、火星坐标系(GCJ02)、百度地图(BD09)坐标系转换案例教程(附转换工具下载)
  3. (筆記) 否定疑問句的回答 (Japanese)
  4. 手机拍照技巧(一:校园拍摄)
  5. SSS1700 QFN36单芯片设计一款USB Typec耳机|支持线控和欧美规自动切换USB耳机方案
  6. Matlab最实用画图命令整理(包括Print输出SCI论文高清大图!)
  7. linux的系统监视器图片_用Nvidia Jetson Nano 2GB和Python构建一个价值60美元的人脸识别系统 - 人工智能遇见磐创...
  8. Android使用Fragment打造万能页面切换框架(三)
  9. 博达网站服务器地址怎么查,路由器博达路由器配置经典教程
  10. Ubuntu修改桌面分辨率