首页 > Python资料 博客日记

初学者对爬虫的实例(抖音/b站)python篇

2025-01-14 01:00:07Python资料围观30

Python资料网推荐初学者对爬虫的实例(抖音/b站)python篇这篇文章给大家,欢迎收藏Python资料网享受知识的乐趣

目录

一、首先基础知识

基本用法

二、然后我们要讲一下爬虫的步骤:

发起请求

获取响应内容

解析内容

保存数据

三、以实战讲解爬虫

        1.首相我们先讲解python爬虫对抖音的讲解

                          1.      进行爬虫第一步(发送请求)

                        2. 进行爬虫第二不(获取相应数据)

                        3.进行爬虫第三步(解析内容)

                        4.进行爬虫第四步(保存数据)

        二、python对b站进行爬虫的讲解


一、基础知识

        1.我们要对pyhon的只是要有一定的基础知识例如:数组,字符串,列表等,这些基础知识是对爬虫过程中数据的处理,当你看到这篇文章时,说明你已经知道很多代码都是基于数据进行下去的,所以我们要对上述的基础只是要有一定的了解,但是也不用着急,这是保姆级教学。

        2.我们已经了解了python的基础知识是要对数据的处理,那么我们要开始进行对数据的获取了,在进行网络爬虫时,python最常用的就是requests,他是一个功能强大的库,requests 库是一个功能强大且广泛使用的 HTTP 请求库。

基本用法

  • 发送 GET 请求:GET 请求是最常用的请求类型之一,用于从服务器获取数据。
  • 发送 POST 请求:当需要向服务器发送数据时,可以使用 POST 请求。

知道这些以后我们就要开始进行爬虫的案例的讲解了。

二、爬虫的步骤:

        

  1. 发起请求

    • 发送HTTP请求:使用库如requests向目标站点发送HTTP请求,包含请求头、请求体等信息。
    • 模拟浏览器行为:通过设置请求头中的User-Agent等字段,模拟真实浏览器的行为,避免被目标网站识别为爬虫而封禁。
    • 处理异常情况:在请求过程中可能会遇到各种异常情况,如网络错误、超时等,需要进行相应的异常处理。
  2. 获取响应内容

    • 接收服务器响应:服务器收到请求后会返回响应,包括状态码、响应头和响应体等信息。
    • 检查响应状态:根据状态码判断请求是否成功,如200表示成功,404表示未找到页面等。
    • 处理响应数据:如果请求成功,可以获取到响应体中的数据,这些数据可能是HTML、JSON、图片、视频等格式。
  3. 解析内容

    • 选择解析工具:根据响应数据的格式选择合适的解析工具,如正则表达式、BeautifulSoup、pyquery等用于解析HTML数据;json模块用于解析JSON数据。
    • 提取有用信息:从解析后的数据中提取出有用的信息,如网页中的文本、链接、图片等。
    • 处理复杂结构:对于复杂的网页结构,可能需要使用多个解析工具组合使用,或者编写自定义的解析逻辑。
  4. 保存数据

    • 选择存储方式:根据需求选择合适的存储方式,如数据库(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数据对比时会发现

通过两种图片中的红色标记处可以发两个变得,会变是因为服务端开了数据加密,所以我们就得去打断点,用的什么加密方式和怎么输出的进行一个研究。

# 因为有课和另外一篇文章,所以需要周末才能进行详细的讲解了。


版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐