翼度科技»论坛 编程开发 python 查看内容

【python爬虫实战】用python爬取爱奇艺电视剧十大榜单的全部数据!

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
目录

一、爬取目标

本次爬取的目标是,爱奇艺电视剧类目下的10个榜单:电视剧风云榜-爱奇艺风云榜

可以看到,这10个榜单包含了:
热播榜、飙升榜、必看榜、古装榜、言情榜、都市榜、搞笑榜、年代榜、悬疑榜、奇幻榜。
我们以热播榜为例,打开Chrome浏览器,按F12进入开发者模式,选择网络 -> XHR这个选项,重新刷新一下页面,并且逐次下拉页面到最底部,展现出全部100部电视剧:

查看捕获到的请求链接地址,每翻一次页,出现一条链接地址,并且该地址的响应数据就是20条电视剧的数据。
所以,这个地址就是我们要请求的地址了。
二、讲解代码

首先,导入需要用到的爬虫库:
  1. import requests  # 发送请求
  2. import pandas as pd  # 存入excel文件
  3. from time import sleep  # 随机等待,防止反爬
  4. import random  # 设置随机
复制代码
从请求地址的Request Header处,拷贝过来一个请求头,放到代码里:
  1. headers = {
  2.         'accept': 'application/json, text/plain, */*',
  3.         'accept-encoding': 'gzip, deflate, br',
  4.         'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
  5.         'origin': 'https://www.iqiyi.com',
  6.         'referer': 'https://www.iqiyi.com/',
  7.         'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="100", "Google Chrome";v="100"',
  8.         'sec-ch-ua-mobile': '?1',
  9.         'sec-ch-ua-platform': '"Android"',
  10.         'sec-fetch-dest': 'empty',
  11.         'sec-fetch-mode': 'cors',
  12.         'sec-fetch-site': 'same-site',
  13.         'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.60 Mobile Safari/537.36'
  14. }
复制代码
爱奇艺的这个榜单页面,反爬不那么厉害,请求头中连cookie都不用加!
由于我想自动爬取这10个榜单,每个榜单对应一个tag标签,从哪里获取呢?经过分析,是从另外一个请求地址返回的:

发现了吗?每个榜单名称是一个tagName,对应一个tagId。拿到tagId,带入到榜单数据的请求地址中:
  1. for page in range(1, 5):
  2.         url = 'https://pcw-api.iqiyi.com/strategy/pcw/data/topRanksData?page_st={}&tag={}&category_id=2&date=&pg_num={}'.format(v_tag_id, v_tag_id, page)
  3.         r = requests.get(url, headers=headers)
复制代码
这样,就完成了向页面发送请求的过程。
顺便说一下这个for循环,一共翻4页,每页25条数据,对应一共100部电视剧。
用json格式接收返回的数据:
  1. json_data = r.json()
复制代码
然后开始解析json数据:
  1. content_list = json_data['data']['formatData']['data']['content']
  2. for content in content_list:
  3.         # 排名
  4.         order_list.append(order)
  5.         # 标题
  6.         title_list.append(content['title'])
  7.         print(order, ' ', content['title'])
  8.         # 描述
  9.         try:
  10.                 desc_list.append(content['desc'])
  11.         except:
  12.                 desc_list.append('')
  13.         # 标签
  14.         tags_list.append(content['tags'])
  15.         tag_info = content['tags'].split(' / ')
  16.         # 上映年份
  17.         year = tag_info[0]
  18.         year_list.append(year)
  19.         # 主演
  20.         actor = tag_info[-1]
  21.         actor_list.append(actor)
  22.         # 弹幕
  23.         try:
  24.                 danmu_list.append(content['danmu'].replace('条弹幕', ''))
  25.         except:
  26.                 danmu_list.append('')
  27.         # 霸榜
  28.         try:
  29.                 babang_list.append(content['babang'])
  30.         except:
  31.                 babang_list.append('')
  32.         # 实时热度
  33.         if v_tag_name == '飙升榜':
  34.                 index_list.append(content['index'] + '%')
  35.         else:
  36.                 index_list.append(content['index'])
  37.         order += 1
复制代码
最后,依然采用我最顺手的方法,拼装成DataFrame的格式,保存到excel文件:
  1. df = pd.DataFrame({
  2.                 '排名': order_list,
  3.                 '标题': title_list,
  4.                 '描述': desc_list,
  5.                 '标签': tags_list,
  6.                 '上映年份': year_list,
  7.                 '主演': actor_list,
  8.                 '弹幕': danmu_list,
  9.                 '霸榜': babang_list,
  10.                 '实时热度': index_list,
  11.         })
  12. if v_tag_name == '飙升榜':  # 如果是飙升榜,把excel标题中的'实时热度'改为'飙升幅度'
  13.         df.rename(columns={'实时热度': '飙升幅度'}, inplace=True)
  14. df.to_excel('爱奇艺电视剧_{}.xlsx'.format(v_tag_name), index=False)
复制代码
这里,需要注意一个小逻辑,飙升榜的'实时热度'需要rename为'飙升幅度',因为飙升榜跟其他榜单不一样!

三、查看结果

共爬取到10个榜单文件:

随便打开一个文件,比如,热播榜:

比如,都市榜:

除了搞笑榜有40+条数据,其他榜单都是100条数据,对应100部电视剧。
四、视频演示

代码演示视频:
五、附完整源码

完整源码:【python爬虫实战】用python爬取《爱奇艺风云榜》电视剧十大榜单!2023.6发布
我是 @马哥python说 ,持续分享python源码干货中!

来源:https://www.cnblogs.com/mashukui/p/17465049.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具