python爬虫_爬取B站视频标题

本文介绍了Python爬虫的基本概念,包括URL、正则表达式和爬虫流程。通过实例展示了如何爬取B站首页热门推荐视频的标题,包括请求数据、正则匹配和保存结果。爬虫流程包括向服务器发送请求,使用正则表达式匹配所需内容,并保存到本地。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

着手写爬虫前,需要了解的几个概念:

URL

全称 Uniform Resource Locator (统一资源定位器),格式为:协议+主机+端口+路径。

比如:https://www.bilibili.com/video/BV17x411w7KC

https:// 是协议,www.bilibili.com 是主机域名,这个例子中端口号并未在主机域名后指定,使用的是默认端口,/video/BV17x411w7KC 是文件路径。

简单来说,就是使用浏览器打开一个网页时,显示在最上方搜索栏中的内容。

正则表达式

通过使用一些预设的字符来创建的通常用于检索字符串的具有一定规则的文本。

需要掌握基本的用法。

比如这个正则表达式:a(.*?)z

可以匹配的字符串有:“abz”,“ab123z”,“ab123字符串z”。

除了以上三种,只要字符串满足第一个字符是 ‘a’,最后一个字符是 ‘z’,都可以被这个正则表达式匹配。因为表达式中的 (.*?) 表示匹配任意字符串。

爬虫

自动从网页上抓取数据的程序或者脚本。

为什么需要爬虫?

试想一下,当你在某壁纸网站闲逛时,发现一个分栏下的壁纸都很好看,想要将他们都下载下来,如果手动操作的话,你需要一张一张地点击下载,而如果使用爬虫,你则可以运行爬虫,然后冲一杯咖啡,稍等片刻,壁纸就都已经下载并保存到你的文件中了。

了解了基本的概念,再来了解爬虫的基本流程。

爬虫的三个主要流程:

(1)请求

向服务器发送请求,并得到服务器响应后返回的数据。

(2)匹配

对返回的数据使用正则表达式进行处理,匹配出需要的内容。

(3)保存

匹配出的内容通常为资源链接,我们通过解析该链接并发送请求,将获取到的数据保存到本地。

OK,开始写爬虫吧。

本次目标:爬取B站首页热门推荐视频标题

首先,我们需要导入必要的模块

#HTTP请求
import urllib
import urllib.request
#正则表达式
import re
#文件
import os

然后,我们依次实现爬虫的三个流程:

请求

浏览器请求头需要我们进入网站按 f12 获取。<

### 使用Python编写爬虫程序抓取B视频链接与标题 为了实现这一目标,可以利用`requests`库发送HTTP请求,并借助`BeautifulSoup`或者`lxml`解析HTML文档。具体来说,在向指定URL发起GET请求之后,可以从返回的内容中筛选出含有视频信息的部分。 对于B而言,其页面结构较为复杂,通常情况下直接从网页源码里寻找视频链接并不是最有效的方式。因为很多资源加载依赖于JavaScript动态渲染,所以更推荐的做法是从API接口入手。比如访问某个UP主的作品列表页时,实际的数据往往是由特定JSON API提供给前端展示的[^1]。 下面是一个简单的例子用于演示如何获取单个视频页面中的标题以及对应的播放地址: ```python import requests from bs4 import BeautifulSoup def get_video_info(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) soup = BeautifulSoup(response.text, 'html.parser') title_tag = soup.find('title') # 获取<title>标签内的内容作为视频标题 video_title = title_tag.string.strip() if title_tag else None script_tags = soup.find_all('script', type='application/json') for tag in script_tags: try: json_data = eval(tag.contents[0]) play_url = json_data['data']['dash']['video'][0]['baseUrl'] audio_url = json_data['data']['dash']['audio'][0]['baseUrl'] break except Exception as e: continue return {'title': video_title, 'playUrl': play_url, 'audioUrl': audio_url} if __name__ == '__main__': url = input("请输入要抓取的B视频网址:") info = get_video_info(url) print(f'视频标题:{info["title"]}\n播放地址:{info["playUrl"]}') ``` 需要注意的是上述代码仅为示意用途,真实环境中还需要考虑更多细节问题,如异常处理、反爬机制应对等。另外,由于网结构调整等原因可能导致此方法失效,因此建议关注官方提供的开放平台服务或遵循robots.txt协议合法合规地开发应用[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值