【学习记录】使用多协程和队列,爬取时光网电视剧TOP100的数据
使用多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介),并用csv模块将数据存储下来。
时光网TOP100链接:http://www.mtime.com/top/tv/top100/
(爬虫精进11)
Windows 10 系统,Python 3.7
from gevent import monkey #从gevent库里导入monkey模块。
monkey.patch_all() #monkey.patch_all()能把程序变成协作式运行,就是可以帮助程序实现异步。
import gevent,requests,bs4,csv,time
from gevent.queue import Queue #从gevent库里导入queue模块#伪装头部
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36'}start = time.time() #记录任务开始的时间
work = Queue() #创建队列对象,并赋值给work。
#观察时光网网址的变化,2-10页有相同的规律,第1页单独安排
for i in range(1,11):if i == 1:url_1 = 'http://www.mtime.com/top/tv/top100/'work.put_nowait(url_1) #将网址放入队列else:urls = 'http://www.mtime.com/top/tv/top100/index-{}.html'.format(i)work.put_nowait(urls) #将网址放入队列def crawler():while not work.empty(): #当队列不是空的时候,就执行下面的程序。url = work.get_nowait() #用get_nowait()函数可以把队列里的网址都取出。res = requests.get(url,headers=headers) #用requests.get()函数抓取网址。bs =bs4.BeautifulSoup(res.text,'html.parser') #解析网址titles = bs.find_all('div',class_="mov_con")for title in titles:name = title.find('a').textdatas = title.find_all('p')for data in datas:#需要提取的“导演”,“主演”和“简介”标签内容都一样,无法根据标签进行抓取,可以采取切片判断的方式进行提取if data.text[:2] == '导演': #判断文本前2个字符是否为“导演”director = data.text[3:] #如若if条件成立,切取第3个字符后面的文本内容赋值给director,即为导演姓名,下面的主演和简介同理。elif data.text[:2] =='主演':actors = data.text[3:]else:content = data.textwriter.writerow([name,director,actors,content])csv_file = open('【FB11】01.2.0_timetop movies save.csv','w',newline='',encoding='utf-8-sig')
writer = csv.writer(csv_file)
writer.writerow(['剧名','导演','主演','简介'])task_list = [] #创建一个空任务列表
for x in range(3): #等同于创建了3个爬虫task = gevent.spawn(crawler) #用gevent.spawn()函数创建执行crawler()函数的任务task_list.append(task) #用append函数把任务添加到tasks_list的任务列表里#因为gevent只能处理gevent的任务对象,不能直接调用普通函数,所以需要借助gevent.spawn()来创建任务对象。#gevent.spawn()的参数需为要调用的函数名及该函数的参数。比如,gevent.spawn(crawler,url)就是创建一个执行crawler函数的任务,参数为crawler函数名和它自身的参数url。gevent.joinall(task_list) #调用gevent库里的joinall方法,启动执行所有的任务。
end = time.time() #记录任务结束时间
print(end-start) #计算任务执行时间并打印
csv_file.close()
queue对象的方法:
put_nowait() #往队列里储存数据
get_nowait() #从队列里提取数据
empty() #判断队列是否为空
full() #判断队列是否为空
qsize() #判断队列还剩多少数量
【学习记录】使用多协程和队列,爬取时光网电视剧TOP100的数据相关推荐
- 多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介)
目录 说明 Code get_movie_id.py get_movie_url.py get_movie_info.py info2csv.py main.py 说明 首先查看电视剧网页结构,发现所 ...
- python find()效率_基于python分别采用同步与异步(协程)方式抓取时光网TOP100电影...
欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 如题,同步运行就是python按照代码 ...
- 使用单线程,多线程,协程,异步爬取包图网大国工匠视频
使用单线程爬取,多线程,协程爬取,异步爬取包图网视频 文章目录 使用单线程爬取,多线程,协程爬取,异步爬取包图网视频 第一步使用单线程爬取包图网视频 多线程爬取视频 用协程爬取 基于协程的异步爬取 第 ...
- python3 协程爬虫,爬取豆瓣排行榜json数据
python携程爬取豆瓣电影排行榜json接口数据.仅学习使用,如有侵权.请联系删除 不说废话直接贴代码,大体方法一样,解析方式不同 #python3 jupyter import asyncio i ...
- python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析
分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...
- python协程gevent案例 爬取斗鱼图片过程解析 - python
文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习 分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中, ...
- Python3 协程 + 正则 批量爬取斗鱼美女图片
from urllib import request from gevent import monkey import random import re import geventmonkey.pat ...
- Kotlin学习:5.1.协程是什么?
协程是什么? 一.什么是协程? 1.解决的问题? 2.基本实现 3.挂起和恢复 4.优势 5.协程的两部分 6.Dispatchers(调度器) 7.任务泄露 8.结构性并发 9.CoroutineS ...
- Python学习笔记-爬取B站电视剧《风犬少年的天空》弹幕并分析
爬取B站电视剧<风犬少年的天空>弹幕并分析 写在前面 开始! 简单分析一下弹幕数据 蠢并痛苦着的学习过程... 干(烂)货环节-------弹幕的获取与整理 关于cid的获取 关于弹幕上限 ...
- 2021春项目需求记录 python实现模拟登录+爬取NASA Modis 上的产品数据
python实现模拟登录+爬取Nasa Modis 上的产品数据 概述 需求分析 基本思路 代码 概述 3月的中旬时候参与了学校的一个大创项目,作为本科生,本人只是摸鱼打杂,负责了其中的一个功能模块: ...
最新文章
- 漫画 | 大数据风控从业者的一天
- **汇总CodeIgniter(CI)的数据库操作函数
- 干掉MySQL!阿里云MVP专家的分库分表设计,搞得太棒了!
- python读取raw数据文件_在python下读取并展示raw格式的图片实例
- 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)...
- 2009年网页设计10大趋势
- Ubuntu使用VNC运行基于Docker的桌面系统
- 网络通信基础(草稿)
- dataframe 一列的不同值_pandas | 详解DataFrame中的apply与applymap方法
- (4)JavaScript之alert语句
- 驳熊节和Martin Fowler的Java消亡论!
- web前端培训Node.js和JavaScript的关系
- MaxScale演示
- 京都计算机学院放假时间表,2018年官方放假安排时间一览表
- python有什么特点有什么应用方向_你知道吗?python特点+可以做什么+就业前景(附30G学习资料)...
- Python学习基础笔记三十二——正则表达式
- JavaExp10:多线程设计,彩票购票问题
- arduino灯光装置_使用Arduino和继电器控制灯光
- 不舍红尘,只因恋上你
- 【马里奥数据结构吃“金币”】时间复杂度和空间复杂度