Python协程理解、基于爬虫举例
当前代码在工作当中没有太大的含义,但是对于大家理解协程的基础概念是相当有好处的 。
协程最直接的可以理解为程序当中一个没有返回的功能块儿。
我们之前有学过多线程,所谓的多线程不论是异步并发,还是并发强调的时候,都将功能放到不同的线程上分别运行 。
但是协程不是这样的,协程强调的是在同一个线程上进行运行,这样免去了线程生产、消费、抛弃的损耗。
站在生产消费者模式来看,多线程主张的是生产者生产: 生产的内容放入缓存, 然后取出使用
协程的主张是:生产者生产,然后生产函数终止,然后消费函数启动。消费完成接着生产
闲话不多说,上代码。提前祝大家节日快乐
import requests
from time import sleep
from lxml import etree
def setUp(fun):"""启动生成器:param fun: 生成器函数"""def inner(**kwargs):k = fun(**kwargs) #调用生成器next(k) #执行一次,效果类似初始化return kreturn inner
@setUp
def getSrc():"""根据内容获取链接"""a = 1while True:content = yield ahtml = etree.HTML(content)imglist = html.xpath('//div[@id="content-left"]//img')for img in imglist:src = "http"+img.attrib.get("src")print(src)
@setUp
def getData():"""根据地址获取内容:return:"""while True:url = "https://www.qiushibaike.com/pic/page/%s/?s=5144861"page = yield urlif page == 1:Referer = "https://www.qiushibaike.com"url = "https://www.qiushibaike.com/pic/"else:Referer = url%pageurl = url % pageprint(url)headers = {"Referer": Referer,"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",}request_data = requests.get(url = url,headers = headers)content = request_data.contentimg = getSrc()img.send(content)sleep(1)
def getPage():"""启动,获取所有的页码"""d = getData()page = 0while page < 35:page += 1d.send(page)
if __name__ == "__main__":getPage()
大家可以跑一下看看,赏心悦目!
Python协程理解、基于爬虫举例相关推荐
- python异步爬虫_Python实现基于协程的异步爬虫
Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...
- python3异步协程爬虫_Python实现基于协程的异步爬虫
Python实现基于协程的异步爬虫 一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Ji ...
- python 协程可以嵌套协程吗_Python实战异步爬虫(协程)+分布式爬虫(多进程)
引言:我们在写爬虫时常会遇到这样的问题,当需要爬取多个URL时,写一个普通的基于requests库的爬虫程序爬取时间会很长.因为是顺序请求网页的,而网页请求和获得响应过程比较耗费时间,程序不得不等待获 ...
- c++ 协程_理解Python协程(Coroutine)
由于GIL的存在,导致Python多线程性能甚至比单线程更糟. GIL: 全局解释器锁(英语:Global Interpreter Lock,缩写GIL),是计算机程序设计语言解释器用于同步线程的一种 ...
- python 协程 php,python3.x,协程_python协程练习部分代码的理解?,python3.x,协程,asyncio - phpStudy...
python协程练习部分代码的理解? import asyncio import threading async def wget(host): print('wget {}'.format(host ...
- python协程和异步编程
文章目录 协程 & 异步编程(asyncio) 1. 协程的实现 1.1 greenlet 1.2 yield 1.3 asyncio 1.4 async & awit 1.5 小结 ...
- python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理
Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, ...
- python 协程原理_Python协程greenlet实现原理
greenlet是stackless Python中剥离出来的一个项目,可以作为官方CPython的一个扩展来使用,从而支持Python协程.gevent正是基于greenlet实现. 协程实现原理 ...
- python gevent async_谈谈Python协程技术的演进
原标题:谈谈Python协程技术的演进 Coding Crush Python开发工程师 主要负责岂安科技业务风险情报系统redq. 引言 1.1. 存储器山 存储器山是 Randal Bryant ...
最新文章
- 使用神经网络提取PDF表格工具来了,支持图片,关键是能白嫖谷歌GPU资源
- Android Studio 更换国内源下载依赖库
- docker 网络 不好用 docker: Error response from daemon: failed to create endpoint jovial_wing on network b
- hdfs如何查找指定目录是否文件_hadoop实战教程-HDFS文件系统如何查看文件对应的block...
- Joint Consensus两阶段成员变更的单步实现
- Linux中的.bash_ 文件的详细说明
- neo4j入门(一)概述
- 从使用Python开发一个Socket示例说到开发者的思维和习惯问题
- 歌评-《胧月夜》-神前暁
- BLOBS表空间数据查询
- React中文文档之Lifting State Up
- 域服务器文件备份,怎么备份域服务器?
- 超级无敌qmail安装大法,详尽之极
- C++ Lua库 源码编译及使用(VS2019)
- 二维图形旋转公式的推导
- 零代码—0代码—无代码平台是什么?怎么选?
- C#打印条码BarTender SDK打印之路和离开之路(web平凡之路)
- HDU-1495-非常可乐
- FCK编辑器在项目中的引入
- 数据结构与算法基础 基本概念
热门文章
- w8计算机主程序在哪里,Win8怎么打开运行窗口_Win8运行在哪里打开?-192路由网
- 计算机英语作文150字,人工智能150字英语作文
- 3.Libgdx扩展学习之Box2D_夹具
- 阅读笔记:Towards Environment Independent Device Free Human Activity Recognition
- swagger不显示接口的可能性
- CSS 滚动条样式美化
- influxdb中将数据导出csv格式数据
- hdu 4859 海岸线 Bestcoder Round 1
- 【Java面试八股文宝典之基础篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day10
- 清空stringBuilder