使用多协程队列,爬取时光网电视剧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的数据相关推荐

  1. 多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介)

    目录 说明 Code get_movie_id.py get_movie_url.py get_movie_info.py info2csv.py main.py 说明 首先查看电视剧网页结构,发现所 ...

  2. python find()效率_基于python分别采用同步与异步(协程)方式抓取时光网TOP100电影...

    欢迎各位小哥哥小姐姐阅读本的文章,对大家学习有帮助,请点赞加关注哦!!!!!!!!!! 您的点赞和关注将是我持续更新的动力呢.^v^ 有不懂的问题可以私聊我哦! 如题,同步运行就是python按照代码 ...

  3. 使用单线程,多线程,协程,异步爬取包图网大国工匠视频

    使用单线程爬取,多线程,协程爬取,异步爬取包图网视频 文章目录 使用单线程爬取,多线程,协程爬取,异步爬取包图网视频 第一步使用单线程爬取包图网视频 多线程爬取视频 用协程爬取 基于协程的异步爬取 第 ...

  4. python3 协程爬虫,爬取豆瓣排行榜json数据

    python携程爬取豆瓣电影排行榜json接口数据.仅学习使用,如有侵权.请联系删除 不说废话直接贴代码,大体方法一样,解析方式不同 #python3 jupyter import asyncio i ...

  5. python从网址爬图片协程_python协程gevent案例 爬取斗鱼图片过程解析

    分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中,最后发现它是以ajax加载的数据,数据格式为json,如图: 圈住的部分是我们需要 ...

  6. python协程gevent案例 爬取斗鱼图片过程解析 - python

    文章来源: 敏而好学论坛 嗨学网www.piaodoo.com 欢迎大家相互学习 分析 分析网站寻找需要的网址 用谷歌浏览器摁F12打开开发者工具,然后打开斗鱼颜值分类的页面,如图: 在里面的请求中, ...

  7. Python3 协程 + 正则 批量爬取斗鱼美女图片

    from urllib import request from gevent import monkey import random import re import geventmonkey.pat ...

  8. Kotlin学习:5.1.协程是什么?

    协程是什么? 一.什么是协程? 1.解决的问题? 2.基本实现 3.挂起和恢复 4.优势 5.协程的两部分 6.Dispatchers(调度器) 7.任务泄露 8.结构性并发 9.CoroutineS ...

  9. Python学习笔记-爬取B站电视剧《风犬少年的天空》弹幕并分析

    爬取B站电视剧<风犬少年的天空>弹幕并分析 写在前面 开始! 简单分析一下弹幕数据 蠢并痛苦着的学习过程... 干(烂)货环节-------弹幕的获取与整理 关于cid的获取 关于弹幕上限 ...

  10. 2021春项目需求记录 python实现模拟登录+爬取NASA Modis 上的产品数据

    python实现模拟登录+爬取Nasa Modis 上的产品数据 概述 需求分析 基本思路 代码 概述 3月的中旬时候参与了学校的一个大创项目,作为本科生,本人只是摸鱼打杂,负责了其中的一个功能模块: ...

最新文章

  1. 漫画 | 大数据风控从业者的一天
  2. **汇总CodeIgniter(CI)的数据库操作函数
  3. 干掉MySQL!阿里云MVP专家的分库分表设计,搞得太棒了!
  4. python读取raw数据文件_在python下读取并展示raw格式的图片实例
  5. 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)...
  6. 2009年网页设计10大趋势
  7. Ubuntu使用VNC运行基于Docker的桌面系统
  8. 网络通信基础(草稿)
  9. dataframe 一列的不同值_pandas | 详解DataFrame中的apply与applymap方法
  10. (4)JavaScript之alert语句
  11. 驳熊节和Martin Fowler的Java消亡论!
  12. web前端培训Node.js和JavaScript的关系
  13. MaxScale演示
  14. 京都计算机学院放假时间表,2018年官方放假安排时间一览表
  15. python有什么特点有什么应用方向_你知道吗?python特点+可以做什么+就业前景(附30G学习资料)...
  16. Python学习基础笔记三十二——正则表达式
  17. JavaExp10:多线程设计,彩票购票问题
  18. arduino灯光装置_使用Arduino和继电器控制灯光
  19. 不舍红尘,只因恋上你
  20. 【马里奥数据结构吃“金币”】时间复杂度和空间复杂度

热门文章

  1. ANSYS 有限元分析 修改与编辑
  2. Android超炫图片浏览器代码
  3. python 100天 pdf 最新版_GitHub - Nolan2018/Python-100-Days: Python - 100天从新手到大师
  4. 从0开始学大数据(十二)
  5. 音频采集 via Media Foundation
  6. 安卓毕业设计源码基于Uniapp+SSM实现的校园心理健康APP
  7. mmdetection在bbox head中获取epoch值
  8. 实现进程互斥需要遵循的原则
  9. 我和计算机专业的故事
  10. Android DataBinding 详解