需求分析
本工具旨在帮助用户根据特定关键词,爬取 Bilibili 网站上的视频信息。用户需要输入搜索关键词、要爬取的页数以及保存结果的文件名。工具将获取搜索结果中的视频 URL 和 BV 号,并将这些信息保存到一个 CSV 文件中。
这是 Bilibili 数据分析项目的一部分。
功能介绍
- 根据用户输入的关键词在 Bilibili 网站上搜索视频。
- 爬取指定页数的搜索结果。
- 提取每个视频的 URL 和 BV 号。
- 将结果保存到 CSV 文件中。
代码讲解
导入依赖库
import re
import requests
from lxml import etree
import time
import random
import pandas as pd
re
: 正则表达式库,用于处理字符串。requests
: 用于发送 HTTP 请求。lxml
: 用于解析 HTML 文档。time
: 用于处理时间,如暂停程序。random
: 用于生成随机数。pandas
: 用于处理数据表格(如 CSV 文件)。
get_target 函数
def get_target(keyword, page, saveName):
get_target
函数接收三个参数:keyword
(搜索关键词),page
(爬取页数),saveName
(保存文件名)。该函数实现了爬取 Bilibili 视频信息的主要功能。
发送请求,获取 HTML 内容
html = requests.get(url.format(i), headers=headers)
使用 requests.get
函数发送 HTTP 请求,获取特定页面的 HTML 内容。
解析 HTML,提取视频信息
bs = etree.HTML(html.text)
items = bs.xpath('//*[@id="i_cecream"]/div/div[2]/div[2]/div/div/div/div[2]/div/div')
使用 lxml
库解析 HTML 内容,然后使用 XPath 表达式提取包含视频信息的元素。
提取视频 URL 和 BV 号
video_url = item.xpath('./div/div[2]/a/@href')[0].replace("//", "")
video_url_BV = re.findall(r"BV.*?/", video_url)
BV = video_url_BV[0][:12]
对于每个视频信息元素,提取视频 URL,并删除 URL 开头的双斜线。然后,使用正则表达式提取视频的 BV 号。
保存结果到 CSV 文件
result.to_csv(saveName, encoding='utf-8-sig', index=False)
将结果保存到 CSV 文件中,使用 UTF-8 编码。
主程序入口
# 主程序入口
if __name__ == "__main__":
# 获取用户输入的关键词、页数和保存文件名
keyword = input("请输入要搜索的关键词:")
page = int(input("请输入要爬取的页数:"))
saveName = input("请输入要保存的文件名:")
# 调用get_target函数,开始爬取数据
get_target(keyword, page,saveName)
主程序入口部分用于接收用户输入的关键词、页数和保存文件名,并调用 get_target
函数执行爬取任务。
使用方法
- 确保安装了所有依赖库:
re
,requests
,lxml
,time
,random
和pandas
。 - 运行脚本。当程序提示输入关键词时,输入要搜索的关键词,例如:“Python”。
- 当程序提示输入要爬取的页数时,输入需要爬取的页数,例如:“5”。
- 当程序提示输入要保存的文件名时,输入希望保存结果的文件名,例如:“bilibili_videos”。
- 程序将开始爬取搜索结果,每爬取一页会输出提示信息,例如:“已经完成b站第 1 页爬取”。
- 爬取完成后,程序会将结果保存为一个 CSV 文件(如:“bilibili_videos.csv”),其中包含视频 URL 和 BV 号。