Python爬虫笔记——多协程gevent()
1. 同步爬取时光网Top100
利用requests和bs4模块就行了
import requests
from bs4 import BeautifulSoup
import timestart=time.time()
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}#获取时光网TOP100的十个网址
url_1='http://www.mtime.com/top/movie/top100/'
list_url=[] #将需要的网址封装成列表
list_url.append(url_1)
for i in range(2,11):url='http://www.mtime.com/top/movie/top100/index-'+str(i)+'.html'list_url.append(url)for i in list_url: #遍历网址res=requests.get(i,headers=headers) #发出请求bs=BeautifulSoup(res.text,'html.parser') #解析数据tagall=bs.find_all('div',class_="mov_con") for tag in tagall:title=tag.find('h2').find('a').text #爬取电影名lj=tag.find('h2').find('a')['href'] #爬取电影的网址print(title,lj)end=time.time() #结束时间
print(f"共用时:{end-start:.2f}秒") #共耗时等于结束时间减去开始时间
2. 利用gevent库异步爬取时光网Top100
安装模块 pip install gevent
#在导入其他库和模块前,先把monkey模块导入进来,并运行monkey.patch_all()。这样,才能先给程序打上补丁。
from gevent import monkey #从gevent库里导入了monkey模块,这个模块能将程序转换成可异步的程序
monkey.patch_all() #它的作用其实就像你的电脑有时会弹出“是否要用补丁修补漏洞或更新”一样。它能给程序打上补丁,让程序变成是异步模式,而不是同步模式。它也叫“猴子补丁”。import gevent,time,requests #我们导入了gevent库来帮我们实现多协程,导入了time模块来帮我们记录爬取所需时间,导入了requests模块帮我们实现爬取10个网站。
from bs4 import BeautifulSoup
import timestart=time.time() #开始时间
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}#获取时光网TOP100的十个网址
url_1='http://www.mtime.com/top/movie/top100/'
list_url=[] #将需要的网址封装成列表
list_url.append(url_1)
for i in range(2,11):url='http://www.mtime.com/top/movie/top100/index-'+str(i)+'.html'list_url.append(url)def cra(url): #定义一个函数,用来执行解析网址和爬取内容res=requests.get(url,headers=headers) #发出请求bs=BeautifulSoup(res.text,'html.parser') #解析数据tagall=bs.find_all('div',class_="mov_con") for tag in tagall:title=tag.find('h2').find('a').text #爬取电影名lj=tag.find('h2').find('a')['href'] #爬取电影的网址print(title,lj)tasks_list = [] #创建空列表
for url in list_url: #遍历网址task = gevent.spawn(cra,url) #用gevent.spawn()创建任务,此任务可以调用cra(url)函数,注意括号里参数的写法tasks_list.append(task) #将任务加入列表
gevent.joinall(tasks_list) #调用gevent库里的joinall方法,能启动执行所有的任务。gevent.joinall(tasks_list)就是执行tasks_list这个任务列表里的所有任务,开始爬取。end = time.time() #结束时间
print(f"共用时:{end-start:.2f}秒") #共耗时
3. 结合gevent库中的queue模块创建多个爬虫异步爬取时光网Top100
#在导入其他库和模块前,先把monkey模块导入进来,并运行monkey.patch_all()。这样,才能先给程序打上补丁。
from gevent import monkey #从gevent库里导入了monkey模块,这个模块能将程序转换成可异步的程序
monkey.patch_all() #它的作用其实就像你的电脑有时会弹出“是否要用补丁修补漏洞或更新”一样。它能给程序打上补丁,让程序变成是异步模式,而不是同步模式。它也叫“猴子补丁”。import gevent,time,requests #我们导入了gevent库来帮我们实现多协程,导入了time模块来帮我们记录爬取所需时间,导入了requests模块帮我们实现爬取10个网站。
from bs4 import BeautifulSoupfrom gevent.queue import Queue #从gevent库里导入queue模块start=time.time() #开始时间
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'}#获取时光网TOP100的十个网址
url_1='http://www.mtime.com/top/movie/top100/'
list_url=[] #将需要的网址封装成列表
list_url.append(url_1)
for i in range(2,11):url='http://www.mtime.com/top/movie/top100/index-'+str(i)+'.html'list_url.append(url)work=Queue() #创建队列对象,并赋值给work。
for i in list_url: #遍历网址work.put_nowait(i) #将网址放进队列里面 def cra(): #定义一个函数,用来执行解析网址和爬取内容while not work.empty(): #当队列不是空的时候,就执行下面的程序。url = work.get_nowait() #将网址从队列里面提取出来res=requests.get(url,headers=headers) #发出请求bs=BeautifulSoup(res.text,'html.parser') #解析数据tagall=bs.find_all('div',class_="mov_con") for tag in tagall:title=tag.find('h2').find('a').text #爬取电影名lj=tag.find('h2').find('a')['href'] #爬取电影的网址print(title,lj)tasks_list = [] #创建空列表
for i in range(2): #创建2个任务,相当于2条爬虫task = gevent.spawn(cra) #用gevent.spawn()创建任务,此任务可以调用cra函数,注意括号里参数的写法tasks_list.append(task) #将任务加入列表
gevent.joinall(tasks_list) #调用gevent库里的joinall方法,能启动执行所有的任务。gevent.joinall(tasks_list)就是执行tasks_list这个任务列表里的所有任务,开始爬取。end = time.time() #结束时间
print(f"共用时:{end-start:.2f}秒") #共耗时
Python爬虫笔记——多协程gevent()相关推荐
- Python爬虫笔记——多协程(gevent and queue)
1.爬取8个网站(包括百度.新浪.搜狐.腾讯.网易.爱奇艺.天猫.凤凰).用多协程gevent()模块来爬取. 这里有一个关于gevent的一些基础介绍的链接 Python并发之协程gevent基础( ...
- Python爬虫——aiohttp异步协程爬取同程旅行酒店评论
大家好!我是霖hero Python并发编程有三种方式:多线程(Threading).多进程(Process).协程(Coroutine),使用并发编程会大大提高程序的效率,今天我们将学习如何选择多线 ...
- Python爬虫项目实例——多协程爬取【薄荷网】的食物热量
爬虫网站:http://www.boohee.com/food/group 爬的信息:食物的名称及热量 代码: import gevent from gevent.queue import Queue ...
- Python 爬虫 - Instagram异步协程
前言 没啥目的,就觉得ins里妹子图多... 正文 一.分析 1.分析目标网站 首先分析网站图片加载流程, taeri__taeri 应该有人认识这个网红.ins照片一次只加载了一定数量的照片,往下翻 ...
- Python并发之协程gevent基础
基本示例 from gevent import monkey monkey.patch_all() # 记住一定放在第一行,这里是打补丁的意思,time模块在使用协程gevent模块的时候,必须打补丁 ...
- 异步爬虫框架与协程浅析
异步爬虫框架与协程浅析 经典原文使用协成完成异步爬虫原文链接 根据分享原文链接. Python基于协程的实现,其实是利用了Python生成器的特性完成的,Python生成器的原理其实涉及到用户态绿色线 ...
- python并发编程之协程
python并发编程之协程 1.协程: 单线程实现并发 在应用程序里控制多个任务的切换+保存状态 优点: 应用程序级别速度要远远高于操作系统的切换 缺点: 多个任务一旦有一个阻塞没有切,整个线程都阻塞 ...
- python并发编程:协程asyncio、多线程threading、多进程multiprocessing
python并发编程:协程.多线程.多进程 CPU密集型计算与IO密集型计算 多线程.多进程与协程的对比 多线程 创建多线程的方法 多线程实现的生产者-消费者爬虫 Lock解决线程安全问题 使用线程池 ...
- python协程是什么_在python中线程和协程的区别是什么
在python中线程和协程的区别:1.一个线程可以拥有多个协程,这样在python中就能使用多核CPU:2.线程是同步机制,而协程是异步:3. 协程能保留上一次调用时的状态,每次过程重入时,就相当于进 ...
最新文章
- Git 取消上一次commit操作,但保留add操作
- 为什么要学python语言_我们为什么要学习Python语言?
- Vue 踩坑日志 - 有关路由传参的坑
- CF802O-April Fools‘ Problem(hard)【wqs二分,优先队列】
- 光端机与光纤收发器的应用
- python调用c函数传字符串参数_Python使用ctypes模块调用DLL函数之传递数值、指针与字符串参数...
- 【nyist】6 喷水装置(一) (简单的贪心)
- BootStrap笔记-导航
- 二进制文件和普通文件(文本文件)区别
- 深度分析DROP,TRUNCATE与DELETE的区别【我的数据库之路系列】
- 经典书单 —— 机器学习/深度学习/AI/CV/PGM
- Linux 下安装python3
- 计算机毕业论文乐谱播放器,单片机音乐播放器毕业论文
- 那群“沙雕”年轻人,正在闲鱼上蹦迪
- 深入理解:面向服务与微服务架构
- 【2021 最新】100 道大厂大数据必考面试题+答案详解
- EXCEL学会两个函数你能打败90%的人,countifs和vlookup
- [附源码]JAVA+ssm计算机毕业设计房屋租赁管理系统设计(程序+Lw)
- Maven-POM.xml
- 四、函数的基本概念和使用
热门文章
- python爬取携程
- 计算机速录等级考试时间,全国计算机速录等级考试三级考试大纲
- PPT 如何两个视频同步播放
- 北京VS上海:“活着为了工作”还是“工作为了生活”?
- 阿里巴巴 电话面试java,记一次阿里巴巴电话面试
- mysql忽略列_mysql – 使用SQL语句更改忽略表添加列(如果不存在)
- java 23种设计模式
- 算法初步--二分法(以PAT考试A1010为例题)
- linux任务计划单独脚本能执行,linux中计划任务执行脚本
- 深入浅出,十年老司机告诉你移动直播如何秒开优化