Python爬虫实战:某站视频获取实例

文章标题:

Python爬虫实践:某站章若楠视频抓取实例

文章内容:

目录

前言

在开展网络爬虫相关操作时,首先得牢记安全是首要准则。要是爬虫操作不谨慎,可能会引发一系列不好的情况。接下来我们要做的是获取某站章若楠的视频内容。

安全为上不可忘

爬虫操作需审慎

获取某站章若楠的视频

嘿嘿,博主就是因为个人很喜欢章若楠才来进行这个视频获取操作的哟(偷笑)。

图片转载自Sina Visitor System

Python爬虫实战:某站视频获取实例

一、直接呈上代码

# 请求某站视频
import json
import requests
from lxml import etree

if __name__ == '__main__':
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",
        # 防止防盗链
        "Referer": "https://www.bilibili.com/",
        "Cookie": "buvid3=3EEF3EE1-472C-F430-105F-0E4F321F331C25161infoc; b_nut=1720613925; _uuid=46847D108-EFD1-9828-99910-32119EADB6EB26022infoc; enable_web_push=DISABLE; buvid4=E9918A3A-008D-2748-2B1F-78B04E8CCA5825688-024071012-IYJQtQw8DTdtrI0uY1UGvQ%3D%3D; buvid_fp=adf3cfaf35396cd4f051041d58ea252d; DedeUserID=455536180; DedeUserID__ckMd5=ece5cba51b3582b0; header_theme_version=CLOSE; rpdid=|(Y|RJRRJ~m0J'u~k|YuR|k); hit-dyn-v2=1; CURRENT_BLACKGAP=0; CURRENT_FNVAL=4048; CURRENT_QUALITY=80; b_lsid=FA4254F2_190DA67F5A6; bmg_af_switch=1; bmg_src_def_domain=i0.hdslb.com; SESSDATA=464ec009%2C1737203167%2C4093c%2A72CjCcAmS6QdnftcRgMbranRB57RDcvOgVEYQ2eANilbiZTke2ujiipqzyDhLaHzdf-lQSVnBETDB6RC1iRTBPOXE0MXJvWndtQ2J5M0ttRUdsNzV4eDBOS0ZHSnJFNGstUXdoZV9YWlFDMUN6WktnVWdyZzNXTHoxX3ZHMEQ4WnBRVFhuS3FWdlZRIIEC; bili_jct=7dcc1afe4e9061803755fe502bd89493; home_feed_column=5; browser_resolution=1528-750; bili_ticket=eyJhbGciOiJIUzI1NiIsImtpZCI6InMwMyIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjE5MTAzODcsImlhdCI6MTcyMTY1MTEyNywicGx0IjotMX0.ZBTc3IhjtIXKw31_mMRIL58EBBFttxFrh9PXvDeNu74; bili_ticket_expires=1721910327; sid=5oumv249; bp_t_offset_455536180=956974561008549888"
    }

    target_url = "https://www.bilibili.com/video/BV1Ya411x7YS/?spm_id_from=333.788.recommend_more_video.-1&vd_source=c37b332e3068ca57bd61f05c52b41922"

    response = requests.get(target_url, headers=headers)

    page_text = response.text

    tree = etree.HTML(page_text)

    with open("bilibili.html", "w", encoding="utf8") as f:
        f.write(page_text)

    video_info_str = "".join(tree.xpath("//head/script[4]/text()"))[20:]
    # print(video_info_str)   # 是一个json大字符串

    info_dict = json.loads(video_info_str)
    # print(info_dict)  # 变成字典

    video_url = info_dict["data"]["dash"]["video"][0]["baseUrl"]  # 获取视频的网址
    audio_url = info_dict["data"]["dash"]["audio"][0]["baseUrl"]  # 获取音频的网址

    video_content = requests.get(video_url, headers=headers).content
    audio_content = requests.get(audio_url, headers=headers).content

    with open("zhangruonan.wmv", "wb") as a_file:
        a_file.write(video_content)

    with open("zhangruonan.mp4", "wb") as b_file:
        b_file.write(audio_content)

    pass

可以发现,这次代码有不少变化之处,我们来一步步分析。

二、爬虫四步骤

1.UA伪装

此次UA伪装的头部代码多了一些内容,其中"Cookie"和"Referer"是某站的反爬机制相关设置。而且这次不需要随机生成UA,而是使用浏览器检查工具获取的,因为随机生成的可能是APP端的,不适用当前场景。

  • 首先要登录自己的某站账号,然后获取Cookie,因为每个用户的Cookie都是独一无二的哦Python爬虫实战:某站视频获取实例
  • 获取UA,Python爬虫实战:某站视频获取实例
  • 获取referer。Python爬虫实战:某站视频获取实例

2.获取url

在对应界面按f12进入检查界面,如果检查界面没有内容就刷新网页,然后向上找到第一个请求,复制其url粘贴到pycharm中即可

Python爬虫实战:某站视频获取实例

3.发送请求

不断变化的是目标url,不变的是发送请求这一操作。

response = requests.get(target_url, headers=headers)

4.获取响应数据进行解析并保存

  • 这次不同的是,视频和音频的url在head的第四个script标签里。
  • 里面的文本内容在去掉前面的"window.playinfo="后,是一个json格式的大字符串。
  • 使用json.loads方法将字符串转为字典,然后通过字典的键来获取视频和音频的url。
  • 某站的视频和音频网址都存储在固定的键中,用上述代码就能取出。
  • 取出后再次发送请求获取数据。
  • 注意啦!图片、视频和音频都是二进制内容,所以要用content属性获取。
  • 最后,以二进制写入的方式保存到文件中,注意文件类型,音频是MP4,视频是MP4或wmv。Python爬虫实战:某站视频获取实例

总结

作者的感慨:

章若楠真的超好看呀!

封面图片:

e81c0805ea854baa9fab333f9e907007.jpeg
版权声明:程序员胖胖胖虎阿 发表于 2025年7月9日 上午3:40。
转载请注明:Python爬虫实战:某站视频获取实例 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...