爬虫入门——使用多协程以及队列爬取时光网电视剧top100
文章目录
前言
python爬虫入门案例,学习总结,依旧存在小bug
一、要求
请使用多协程和队列,爬取时光网电视剧TOP100的数据(剧名、导演、主演和简介),并用CSV模块将数据存储下来(文件名:time100.csv)。
-
使用gevent实现多协程爬虫的重点:
定义爬取函数
用gevent.spawn()创建任务
用gevent.joinall()执行任务 -
使用queue模块的重点:
用Queue()创建队列
用put_nowait()储存数据
用get_nowait()提取数据
queue对象的其他方法:empty()判断队列是否为空,full()判断队列是否为满,qsize()判断队列还剩多少 -
csv写入的步骤:
创建文件调用open()函数
创建对象借助writer()函数
写入内容调用writer对象的writerow()方法
关闭文件close()
二、分析与代码实现
1.查看电视剧网页结构
2.查找网页url规律
因为在Query String Parameters中并未发现电视剧url的规律,所以我们点开几部电视剧具体来寻找url规律
No.1 绅士大盗:
Url_1=‘http://frontgateway.mtime.com/library/movie/detail.api?tt=1617390652977&movieId=15167&locationId=290’
No.2 老友记
Url_2=‘http://front-gateway.mtime.com/library/movie/detail.api?tt=1617390872527&movieId=269369&locationId=290’
对比Url_1和Url_2,发现tt和movieId不同,去掉tt后发现仍可访问,所以主要是movieId的原因,此时我们爬取每一部电视剧的url
ps.因为我当时是直接看的network,所以爬的itemId,但是与movieId相同,不影响结果
代码如下:
#获得tv的url
res_tv=requests.get('http://front-gateway.mtime.com/library/index/app/topList.api?')
json_tv=res_tv.json()
#因为发现movieId与主页的itemId相同,此处直接使用主页的itemId
list_tv=json_tv['data']['tvTopList']['topListInfos'][0]['items']