首页 > Python资料 博客日记
初学者对爬虫的实例(抖音/b站)python篇
2025-01-14 01:00:07Python资料围观30次
目录
一、基础知识
1.我们要对pyhon的只是要有一定的基础知识例如:数组,字符串,列表等,这些基础知识是对爬虫过程中数据的处理,当你看到这篇文章时,说明你已经知道很多代码都是基于数据进行下去的,所以我们要对上述的基础只是要有一定的了解,但是也不用着急,这是保姆级教学。
2.我们已经了解了python的基础知识是要对数据的处理,那么我们要开始进行对数据的获取了,在进行网络爬虫时,python最常用的就是requests,他是一个功能强大的库,requests 库是一个功能强大且广泛使用的 HTTP 请求库。
基本用法
- 发送 GET 请求:GET 请求是最常用的请求类型之一,用于从服务器获取数据。
- 发送 POST 请求:当需要向服务器发送数据时,可以使用 POST 请求。
知道这些以后我们就要开始进行爬虫的案例的讲解了。
二、爬虫的步骤:
-
发起请求
- 发送HTTP请求:使用库如
requests
向目标站点发送HTTP请求,包含请求头、请求体等信息。 - 模拟浏览器行为:通过设置请求头中的
User-Agent
等字段,模拟真实浏览器的行为,避免被目标网站识别为爬虫而封禁。 - 处理异常情况:在请求过程中可能会遇到各种异常情况,如网络错误、超时等,需要进行相应的异常处理。
- 发送HTTP请求:使用库如
-
获取响应内容
- 接收服务器响应:服务器收到请求后会返回响应,包括状态码、响应头和响应体等信息。
- 检查响应状态:根据状态码判断请求是否成功,如200表示成功,404表示未找到页面等。
- 处理响应数据:如果请求成功,可以获取到响应体中的数据,这些数据可能是HTML、JSON、图片、视频等格式。
-
解析内容
- 选择解析工具:根据响应数据的格式选择合适的解析工具,如正则表达式、BeautifulSoup、pyquery等用于解析HTML数据;
json
模块用于解析JSON数据。 - 提取有用信息:从解析后的数据中提取出有用的信息,如网页中的文本、链接、图片等。
- 处理复杂结构:对于复杂的网页结构,可能需要使用多个解析工具组合使用,或者编写自定义的解析逻辑。
- 选择解析工具:根据响应数据的格式选择合适的解析工具,如正则表达式、BeautifulSoup、pyquery等用于解析HTML数据;
-
保存数据
- 选择存储方式:根据需求选择合适的存储方式,如数据库(MySQL、MongoDB等)、文件(CSV、JSON等)或内存缓存(Redis等)。
- 设计数据结构:根据提取的信息设计合适的数据结构,以便后续的查询和使用。
- 实现存储逻辑:编写代码将提取的信息存储到选择的存储介质中,并确保数据的完整性和一致性。
三、实战讲解爬虫
1.先讲解python爬虫对抖音的讲解
1.首先我们对数据的分析要到位,用谷歌浏览器打开抖音的官方界面
2.然后F12打开开发者模式,找到Network,并找到medio
在此处我们就能够找到,视频的链接所在网址了
找到对应的url,然后通过Request Method分析知道请求的方式是GET请求
接下来就是使用代码进行爬虫四部曲了。
3.代码:
import requests
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'
data={
"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",
"referer": "https://www.douyin.com/",
"date": "Wed, 20 Nov 2024 13:21:31 GMT"
}
response = requests.get(url=url, headers=data)
if response.status_code == 200:
open("你好.mp4", 'wb').write(response.content)
print("下载成功")
else:
print("请求失败,状态码:", response.status_code)
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方法进行请求发送
import requests
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'
data={
"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",
"referer": "https://www.douyin.com/",
"date": "Wed, 20 Nov 2024 13:21:31 GMT"
}
response = requests.get(url=url, headers=data)
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.第一步(发送请求)
import requests
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'
headers = {
'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',
'range':'bytes=0-2947',
'referer':'https://www.bilibili.com/video/BV1D8BgY2E5b/?spm_id_from=333.1007.tianma.1-2-2.click'
}
当我们找到最开始在url中有.m4s的响应中
比在都抖音中多了一个Payload,所以任然使用抖音的方式时,就会发现弹出的响应时206说明,在发送请求的时候,缺少了部分请求头,所以只会获得部分的数据,当然这并不是我们想要的,所以我们需要将Payload也要放入当请求头中,但是我们通过两个有着.m4s的url数据对比时会发现
通过两种图片中的红色标记处可以发两个变得,会变是因为服务端开了数据加密,所以我们就得去打断点,用的什么加密方式和怎么输出的进行一个研究。
# 因为有课和另外一篇文章,所以需要周末才能进行详细的讲解了。
标签:
相关文章
最新发布
- 【Python】conda虚拟环境创建及使用
- 基于人脸识别的校园课堂考勤管理系统设计与实现(Python)
- Python的13款Web框架对比(比较全!建议收藏!)
- 【python】Matplotlib库安装教程
- Python 青铜宝剑十六维,破医疗数智化难关(上)
- 【Python篇】PyQt5 超详细教程——由入门到精通(序篇)
- Python 条件语句详解 if - elif-else
- C语言&Python&Bash:空白(空格、水平制表符、换行符)与转义字符
- 计算机毕业设计Python中华古诗词知识图谱可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析模型 自然语言处理NLP 机器学习 深度学习
- Python | 基于支持向量机(SVM)的图像分类案例
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Anaconda版本和Python版本对应关系(持续更新...)
- Python与PyTorch的版本对应
- Windows上安装 Python 环境并配置环境变量 (超详细教程)
- Python pyinstaller打包exe最完整教程