Python爬虫获取b站综合热门视频Top100的详细信息(最新可用版 附源码)

首先,我们先要爬取的页面是这个,获取以下视频的详细信息(播放量,点赞数,作者等)

打开开发者工具,直接全局搜索第一个视频关键词“猫”,进入对应包中,查看详细信息。

我们发现响应数据都由json字符串构成。查看对应参数和url

我们猜测ps可能为个数,pn为页数,wts为时间戳,其他不知道。

再往下滑获取接下来视频的信息

查看参数

对比两张图的参数,我们可以确定:ps为视频数量,pn为页数,web_location为定值,

w_rid为变量(可能涉及js加密),wts为时间戳(等会用time.time()获取)

1.先解决w_rid的问题:

先搜索w_rid

发现第一个js里面有md5关键词,猜测为md5加密,我们进入第一个js里

接着搜索w_rid

只有一个匹配项,我们打上断点,刷新页面

很明显w_rid是采用了md5加密,里面参数的值是m+o的两个字符串,查看u

var m=u.join("&"),m是u列表里用&分开构成的一个字符串

接着我们在控制台获取m,o的值

再发一次请求对比里面参数有什么变化

ok我们可以发现m的值wts为时间戳为变量,其他为定值,o本身也为定值。这样就很简单了。

2.写入md5相关代码

3.发送请求,获取json数据,提取json数据里的信息

对应的url

数据获取

4.保存数据到csv文件

保存成功

5.源码

import time
import hashlib
import csv
import requests
wts=int(time.time())
#u=['ids=2837%2C2836%2C2870%2C2953%2C2954%2C2955%2C2956%2C5672', 'pf=0', 'wts=1710828406']
u=[
    'ids=2837%2C2836%2C2870%2C2953%2C2954%2C2955%2C2956%2C5672',
    'pf=0',
    f'wts={wts}'
]
m='&'.join(u)
o='ea1db124af3c7062474693fa704f4ff8'
string=m+o
md=hashlib.md5(string.encode())#創建md5對象
w_rid=md.hexdigest()
fp=open('./B站Top100综合热门视频.csv','a',encoding='utf-8',newline='')
csv_writer=csv.DictWriter(fp,fieldnames=['标题','视频号','作者','点赞','投币','转发','播放量','评论'])
csv_writer.writeheader()
for page in range(1,6):
    url=f'https://api.bilibili.com/x/web-interface/popular?ps=20&pn={page}&web_location=333.934&w_rid={w_rid}&wts={wts}'
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
    }
    json_data=requests.get(url=url,headers=headers).json()
    list=json_data['data']['list']
    for li in list:
        title=li['title']#标题
        aid=li['stat']['aid']#视频号
        owner=li['owner']['name']#作者
        favorite = li['stat']['favorite']  # 点赞
        coin=li['stat']['coin']#投币
        share=li['stat']['share']#转发
        view = li['stat']['view']  # 播放量
        reply=li['stat']['reply']#评论
        dic={
            '标题':title,
            '视频号':aid,
            '作者':owner,
            '点赞':favorite,
            '投币':coin,
            '转发':share,
            '播放量':view,
            '评论':reply
        }
        csv_writer.writerow(dic)

  • 29
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
爬取Python爬虫猫眼电影Top100,你可以按照以下步骤进行操作: 1. 首先,定义一个函数get_page(url),用于获取指定URL的HTML源码。这个函数可以使用requests库发送GET请求来获取页面内容。如果返回的状态码为200,表示获取成功,将HTML源码返回;如果状态码不为200,则返回'Crawl Failed'。 2. 在获取HTML源码之后,你需要解析HTML源码来提取所需的电影信息。可以使用正则表达式来匹配HTML源码中的电影排名、名称、主演、上映时间和地区等信息。 3. 创建一个空的DataFrame,用于存储电影信息。DataFrame的列可以分别定义为'Rank'、'Name'、'Actors'、'Date'和'Region'。然后,遍历解析HTML源码后得到的结果列表,将每个电影的信息添加到DataFrame中的相应行和列中。注意在处理演员信息、上映时间和地区字段时要进行相应的处理和清洗。 4. 最后,将DataFrame保存为CSV格式的数据文件,即可得到你所期望的Python爬虫猫眼电影Top100的电影信息。你可以使用pandas库的to_csv方法来实现保存。 下面是一个示例代码,演示了如何爬取猫眼电影Top100的电影信息并保存为CSV文件: import requests import re import pandas as pd def get_page(url): response = requests.get(url) if response.status_code == 200: return response.text else: return 'Crawl Failed' def parse_html(html): pattern = re.compile('<dd>.*?board-index.*?>(\d )</i>.*?name.*?title="(.*?)".*?star.*?主演:(.*?)</p>.*?releasetime.*?上映时间:(.*?)</p>', re.S) result = re.findall(pattern, html) return result html = get_page('https://maoyan.com/board/4') result = parse_html(html) data = pd.DataFrame([], columns=['Rank', 'Name', 'Actors', 'Date', 'Region']) for i, item in enumerate(result): rank = i + 1 name = item actors = item.strip() temp = item.split('(') if len(temp) == 1: date = temp region = '' else: date = temp region = temp[:-1] data.loc[i] = [rank, name, actors, date, region] data.to_csv('maoyan_top100.csv', index=False) 以上代码将会爬取猫眼电影Top100的电影信息,并且保存为名为maoyan_top100.csv的CSV文件。你可以根据实际需求进行修改和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值