class="hljs-ln-code"> class="hljs-ln-line"> class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">url = 'https://v3-web-prime.douyinvod.com/video/tos/cn/tos-cn-ve-15/oEvAtEFE2IDDYmQAVfbgfYE8nSE295TAD6slnB/?a=6383&br=1543&bt=1543&btag=c0000e00030000&cd=0%7C0%7C0%7C3&ch=5&cquery=100H_100K_100o_101s_100B&cr=3&cs=0&cv=1&dr=0&ds=6&dy_q=1734360895&expire=1734372005&feature_id=f0150a16a324336cda5d6dd0b69ed299&ft=_-iaryTkRR0sT1C4-Dv2Nc.xBiGNbL6U.41U_4B1lvcJNv7TGW&is_ssr=1&l=2024121622545383C4FC396BC5F11F87C7&lr=all&mime_type=video_mp4&ply_type=4&policy=4&qs=0&rc=ZTxoZzg8ZjVpODZkOzY0PEBpanU6Nm05cnA4djMzNGkzM0BiXmIuMjFhXi4xNV9fYV4yYSNjYS5jMmQ0XjZgLS1kLTBzcw%3D%3D&signature=229bb4c5f7fc40ac29a969ea37b182dc&tk=webid&webid=c4a29131752d59acb78af076c3dbdd52744118e38e80b4b96439ef1e20799db0f312776930072a05d5d7d08d9a19c9cba4a04373cb4c5191098f4b90f725677686aa13e788062095c7a8888cf1ec4b87ea6d46cae9a9f59da04ec7e0c2c69dae5d69079001e34139ec926363e90839cfa107aac34276f75c9bf2bf8323e650d7feada04b0e0879d98da8fe86a88a91e0c7149beef7854a4f123c983f5c2a26e7-c210f4d2ebae5743762b4f4c509cd00e&fid=5bd4267669ce370df308a41ab649a285' class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line"> class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">data={ class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> "referer": "https://www.douyin.com/", class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> "date": "Wed, 20 Nov 2024 13:21:31 GMT" class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">} class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line"> class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line">response = requests.get(url=url, headers=data) class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="12"> class="hljs-ln-code"> class="hljs-ln-line"> class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="13"> class="hljs-ln-code"> class="hljs-ln-line">if response.status_code == 200: class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="14"> class="hljs-ln-code"> class="hljs-ln-line"> open("你好.mp4", 'wb').write(response.content) class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="15"> class="hljs-ln-code"> class="hljs-ln-line"> print("下载成功") class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="16"> class="hljs-ln-code"> class="hljs-ln-line">else: class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="17"> class="hljs-ln-code"> class="hljs-ln-line"> print("请求失败,状态码:", response.status_code) class="hide-preCode-box">
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
4.对上述代码进行讲解,首相我们找到requests.get(url=url,data=data),这列我们讲解一下,requests.get(url, params=None, **kwargs)
,其中 url
是请求的目标地址,params
是可选参数,用于传递查询字符串参数,**kwargs
允许你传递其他关键字参数来自定义请求。所以我们要利用之前找到的视频链接网址将目标url传进去,再将所需要的数据,也就是data进行传入。
5.然后我们对上述代码进行爬虫四部曲的讲解。
1. 第一步(发送请求)
对下面图片中就是我们提供的url,和data,利用之前分析知道的GET方式进行的请求,所以使用requests库中的get方法进行请求发送
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">import requests
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">url = 'https://v3-web-prime.douyinvod.com/video/tos/cn/tos-cn-ve-15/oEvAtEFE2IDDYmQAVfbgfYE8nSE295TAD6slnB/?a=6383&br=1543&bt=1543&btag=c0000e00030000&cd=0%7C0%7C0%7C3&ch=5&cquery=100H_100K_100o_101s_100B&cr=3&cs=0&cv=1&dr=0&ds=6&dy_q=1734360895&expire=1734372005&feature_id=f0150a16a324336cda5d6dd0b69ed299&ft=_-iaryTkRR0sT1C4-Dv2Nc.xBiGNbL6U.41U_4B1lvcJNv7TGW&is_ssr=1&l=2024121622545383C4FC396BC5F11F87C7&lr=all&mime_type=video_mp4&ply_type=4&policy=4&qs=0&rc=ZTxoZzg8ZjVpODZkOzY0PEBpanU6Nm05cnA4djMzNGkzM0BiXmIuMjFhXi4xNV9fYV4yYSNjYS5jMmQ0XjZgLS1kLTBzcw%3D%3D&signature=229bb4c5f7fc40ac29a969ea37b182dc&tk=webid&webid=c4a29131752d59acb78af076c3dbdd52744118e38e80b4b96439ef1e20799db0f312776930072a05d5d7d08d9a19c9cba4a04373cb4c5191098f4b90f725677686aa13e788062095c7a8888cf1ec4b87ea6d46cae9a9f59da04ec7e0c2c69dae5d69079001e34139ec926363e90839cfa107aac34276f75c9bf2bf8323e650d7feada04b0e0879d98da8fe86a88a91e0c7149beef7854a4f123c983f5c2a26e7-c210f4d2ebae5743762b4f4c509cd00e&fid=5bd4267669ce370df308a41ab649a285'
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line">
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">data={
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> "referer": "https://www.douyin.com/",
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> "date": "Wed, 20 Nov 2024 13:21:31 GMT"
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">}
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="10"> class="hljs-ln-code"> class="hljs-ln-line">
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="11"> class="hljs-ln-code"> class="hljs-ln-line">response = requests.get(url=url, headers=data)
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
2. 第二步(获取相应数据)
先通过response库中的status_code方法与200进行比较,这里的意思是对目标网站发送请求时获取的相应状态,200的意思时相应成功,也就是获取到了相应的数据
3.第三步(解析内容)
因为在抖音中可以直接通过response库中的content方法直接进行内容的处理,所以不需要进行内容的分析
4.第四步(保存数据)
利用python中的open方法进行写入,最后运行就可以在同级目录下找到爬虫获取的相应数据,具体不做分析,因为最开始说了,需要一定的基础。
2、python对b站进行爬虫的讲解
讲一下为什么b站要和抖音的爬虫要分开讲解,因为两者有一定的不同,首先就是b站有反扒,单从这一点就有很大的区别。
1.方法一:直接通过数据获取我们想要的视频即信息
这个方法是利用爬虫四部曲中的第一部发起请求的过程中,通过在网页上寻找网页视频资源也就是目标链接的过程中直接下载
首先第一步就是打开b站,点击想要获取内容的视频,再按F12打开开发者工具,看到Network中,

也就是上述网页,通常我们可以通过点击Media,就会看见.mp4等视频资源,开始时我们说了,因为存在反爬虫,所以不可能简单的放在Media中,所以我们要去找视频资源在哪,通常我们在Fetch/XHR,Media,Other中进行查找,但是Other一般存放的是一些文件数据,除非必要时刻(也就是在前面两者里面都没有找到时),可以在这里寻找。
当我们查找Media中会发现,什么数据都没有,无论我们怎么刷新都没有什么用,所以接下来我们要通过Fetch/XHR中寻找,因为数据太多,但是我们又不得不一个一个慢慢的找,但是这里因为是在教学,所以我会直接告诉要找一个什么视频资源,

我们在b站中一般的通过打开开发者工具,再次刷新时,查找url中存在.m4s的文件,上述途中红色标记所在处。点击第一条刷新出的数据,就是我们想要的数据了。
上述中我们找到需要的数据,是两种方法都需要的用到的,所以真正的方法一实在此处开始:
找到我们需要的数据后,点击Sources,
和上述图中一样,我们寻找到我所选的位置,发现下面就有我们需要的数据,找到baseUrl的值,然后复制到新的页面就会自动下载视频资源。
当我们下载下来以后,发现播放时只有视频,没有音频。这是怎么回事呢?
我们需要了解到的时,b站的视频资源是通过视频和音频分开进行拼接的,所以视频和音频是单独分开的,接写来就是寻找到音频的链接。

上述图片中,我所选中的就是音频的所在,找到baseUrl的值,复制到新的页面就可以下载了,最后通过pr等其他的方式将视频和音频进行拼接就可以了,到此方法一就结束了。
2.方法二:通过python代码进行获取
1.第一步(发送请求)
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="1"> class="hljs-ln-code"> class="hljs-ln-line">import requests
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="2"> class="hljs-ln-code"> class="hljs-ln-line">
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="3"> class="hljs-ln-code"> class="hljs-ln-line">url = 'https://xy118x184x254x117xy240ey5ay7820y1y1yy117xy.mcdn.bilivideo.cn:4483/upgcxcode/76/41/27325434176/27325434176-1-100022.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1734417283&gen=playurlv2&os=mcdn&oi=1954608777&trid=00002b72cd7ad2c64b2b8e8ef06412481140u&mid=0&platform=pc&og=cos&upsig=f96a3be6bd2948b61dd40ffafce5f8c1&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,mid,platform,og&mcdnid=50009047&bvc=vod&nettype=0&orderid=0,3&buvid=BAE46747-688D-D3D5-AFB0-6F7F595B0A8413080infoc&build=0&f=u_0_0&agrr=0&bw=53261&logo=A0020000'
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="4"> class="hljs-ln-code"> class="hljs-ln-line">
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="5"> class="hljs-ln-code"> class="hljs-ln-line">headers = {
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="6"> class="hljs-ln-code"> class="hljs-ln-line"> 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="7"> class="hljs-ln-code"> class="hljs-ln-line"> 'range':'bytes=0-2947',
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="8"> class="hljs-ln-code"> class="hljs-ln-line"> 'referer':'https://www.bilibili.com/video/BV1D8BgY2E5b/?spm_id_from=333.1007.tianma.1-2-2.click'
- class="hljs-ln-numbers"> class="hljs-ln-line hljs-ln-n" data-line-number="9"> class="hljs-ln-code"> class="hljs-ln-line">}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
当我们找到最开始在url中有.m4s的响应中

比在都抖音中多了一个Payload,所以任然使用抖音的方式时,就会发现弹出的响应时206说明,在发送请求的时候,缺少了部分请求头,所以只会获得部分的数据,当然这并不是我们想要的,所以我们需要将Payload也要放入当请求头中,但是我们通过两个有着.m4s的url数据对比时会发现


通过两种图片中的红色标记处可以发两个变得,会变是因为服务端开了数据加密,所以我们就得去打断点,用的什么加密方式和怎么输出的进行一个研究。
# 因为有课和另外一篇文章,所以需要周末才能进行详细的讲解了。
data-report-view="{"mod":"1585297308_001","spm":"1001.2101.3001.6548","dest":"https://blog.csdn.net/tsk2642014359/article/details/144520089","extend1":"pc","ab":"new"}">>
评论记录:
回复评论: