首先我们导入两个包

from bs4 import BeautifulSoup
import requests

如果你没有第一行的包,那么在PyCharm编译器中的话,只要将鼠标移到那上面去就会弹出个提示框,选择前面有Install的一行蓝字,点击它就能下载回来了。

然后我们准备一个字符串,里面存着我们要借助b站引擎搜索的关键字
我这里准备了一行字符串,用它搜索只会有一个视频出现:

userSeach='【迷你摩托】张本智和(11岁)VS谭瑞午/Jens'

然后我们准备如下字符串:https://search.bilibili.com/all?keyword=
后面需要追加我们的搜索关键字

然后我们用以下代码,让b站的搜索引擎帮助我们搜索我们需要的相关视频,并返回搜索页

mainUrl='https://search.bilibili.com/all?keyword='+userSeach
mainSoup = BeautifulSoup(requests.get(mainUrl).text, "html.parser")

此时,mainSoup 中存储的就是搜索结果页面的整个页面的html代码

由于我们考虑到搜索到的视频可能很多,所以会产生分页,所以我们这里先通过网页中的一段代码来看看我们的搜索结果一共有多少页的结果。

首先点击这里

随后我们按Ctrl+F打开搜索框,输入下一页进行搜索,可以看见下图的箭头位置有个50,那预示着最大页数是50。
他周围的样式有个最特别且唯一的,那就是一个样式为page-item last的li标签
我们应用以下代码锁定他,从而获得这个对象,并将它暂时赋值给pages
(剩下内容不再阐述如何根据标签锁定数据所在地)

pages=mainSoup.find('li',class_="page-item last")


值得注意的是,如果搜索结果不存在或者只有一页,你是找不到这个
所以考虑到这种情况,我们在上面的代码的基础上,将代码写成:

pages=mainSoup.find('li',class_="page-item last")
if(pages):pages=int(pages.text)
else:pages=1

通过判断pages是否为空,可以分开两种情况,并处理。
第一种情况就是有多少页数给多少页数
第二种情况则是设置为只有一页

之后我们设置while来遍历所有的结果页,在此之前,我们先了解下如何换页:

当我点开了第二页,发现地址栏上多出了一小段字符串,明显的,它就是用来换页的。

那么,这个循环的基础代码就写成:

while page<=pages:mainUrl='https://search.bilibili.com/all?keyword='+userSeach+'&page='+page.__str__()mainSoup = BeautifulSoup(requests.get(mainUrl).text, "html.parser")...待写...page+=1

这里的page是当前页数,初始值为1
这样子,这个循环就能遍历所有结果页了

然后我们正式进入获取视频信息的环节

我们用一个viedoNum变量(初始值为0)来表示这是第几个被获取的视频

val临时变量来存储一个对象,避免重复查找,浪费时间

我们可以从搜索页上直接获取的信息有:

while page<=pages:mainUrl='https://search.bilibili.com/all?keyword='+userSeach+'&page='+page.__str__()mainSoup = BeautifulSoup(requests.get(mainUrl).text, "html.parser")for item in mainSoup.find_all('li',class_="video-item matrix"):viedoNum += 1print('第'+ viedoNum.__str__() + '个视频:')val=item.find('a',class_="img-anchor")print('视频标题:'+ val["title"])print('视频链接:'+'https:'+val["href"])print('视频简介:'+item.find('div',class_="des hide").text.strip())print('up主:'+ item.find('a',class_="up-name").text.strip())print('视频观看量:'+ item.find('span',title='观看').text.strip())print('弹幕量:'+ item.find('span',title='弹幕').text.strip())print('上传时间:'+ item.find('span',title='上传时间').text.strip())page+=1

由于视频图片是js动态获取的,所以我们没办法在搜索结果页上直接获取

所以我们得进去相关页面内才能获取视频图片

那么,结合上面的代码,继续写下去有:

subUrl=val["href"];
subSoup = BeautifulSoup(requests.get('https:'+subUrl).text.strip(), "html.parser")
print('视频图片:'+subSoup.find(itemprop="image")["content"])

于是,视频图片也到手了。

最终结果图是:
关键字是:【迷你摩托】张本智和(11岁)VS谭瑞午/Jens

关键字是:java

PS:你可能注意到了部分中文没有显示,但这只是编译器自己的显示问题,实际上,如果你复制那串疑似消失的字符串到外面再粘贴,那些字都是有且完整的。

完整代码:

from bs4 import BeautifulSoup
import requests
userSeach='【迷你摩托】张本智和(11岁)VS谭瑞午/Jens'
page=1
viedoNum=0
val=0
mainUrl='https://search.bilibili.com/all?keyword='+userSeach
mainSoup = BeautifulSoup(requests.get(mainUrl).text, "html.parser")
pages=mainSoup.find('li',class_="page-item last")
if(pages):pages=int(pages.text)
else:pages=1
while page<=pages:mainUrl='https://search.bilibili.com/all?keyword='+userSeach+'&page='+page.__str__()mainSoup = BeautifulSoup(requests.get(mainUrl).text, "html.parser")for item in mainSoup.find_all('li',class_="video-item matrix"):viedoNum += 1print('第'+ viedoNum.__str__() + '个视频:')val=item.find('a',class_="img-anchor")print('视频标题:'+ val["title"])print('视频链接:'+'https:'+val["href"])print('视频简介:'+item.find('div',class_="des hide").text.strip())print('up主:'+ item.find('a',class_="up-name").text.strip())print('视频观看量:'+ item.find('span',title='观看').text.strip())print('弹幕量:'+ item.find('span',title='弹幕').text.strip())print('上传时间:'+ item.find('span',title='上传时间').text.strip())subUrl=val["href"];subSoup = BeautifulSoup(requests.get('https:'+subUrl).text.strip(), "html.parser")print('视频图片:'+subSoup.find(itemprop="image")["content"])page+=1

[Python]指定搜索关键字,通过网页获取bilibili的相关视频信息相关推荐

  1. python利用有道词典翻译_使用Python从有道词典网页获取单词翻译

    从有道词典网页获取某单词的中文解释. import re import urllib word=raw_input('input a word\n') url='http://dict.youdao. ...

  2. 【Python练习】如何使用Pandas获取“豆瓣电影”相关数据,并生成Excel表格

    使用Python获取"豆瓣电影"相关数据,并生成Excel表格 本文使用了requests和pandas第三方库,对豆瓣电影各相关数据进行爬取,并记录至Excel表格内.但发现存在 ...

  3. python批量搜索关键字_python – 搜索多个关键字的字符串列表

    我有两个 python列表,一个是关键字列表,另一个是文件名列表.我需要根据我拥有的关键字解析文件名列表.我希望python将文件名与关键字匹配,然后根据匹配的关键字执行操作. 我看起来像这样: ke ...

  4. python如何搜索关键字_Python遍历目录和搜索文件中的关键字

    2012-11-03 wcdj 遗留问题:如何处理中文 #-*- coding: gbk -*- ############ # 20121003 wcdj # FindFilev0.1 # 遍历目录和 ...

  5. python输出出现频率最高的字母_用Python实现搜索某一网页中出现频率最高的前N个英文单词 输入: 网址,N值 输出:按出现频率由高到低排...

    满意答案 好象是有一个jieba分词.国人写的,有一个小男孩的头像.挺简单,好玩. 它里有topN的算法.我把代码复制过来.你看一下.最关键的就一句话. import sys sys.path.app ...

  6. python批量搜索关键字_多关键字是高效的搜索关键字

    这属于"天真"阵营,但这里有一种方法,将集合作为思考的食粮:docs = [ """ Here's a sentence with dog and a ...

  7. Python爬虫入门8:BeautifulSoup获取html标签相关属性

    ☞ ░ 前往老猿Python博客 https://blog.csdn.net/LaoYuanPython ░ 一. 引言 在上节<https://blog.csdn.net/LaoYuanPyt ...

  8. python中sn的意思_python获取内存SN编号等信息

    物理机内存检查, #!/usr/bin/env python # -*-coding:UTF-8 -*- import os memdict = dict() memditail = dict() # ...

  9. 使用python uiautomation从钉钉网页版提取公司所有联系人信息

    之前写了一个提取QQ群里所有人信息的脚本 https://www.cnblogs.com/Yinkaisheng/p/5114932.html 今天写一个从钉钉网页版提取公司所有人通讯录的脚本,,本脚 ...

最新文章

  1. 组合数据类型{集合,序列【字符串,元组,列表】,字典}
  2. IBASE category 03 parent relationship remove
  3. 递归锁、信号量、GIL锁、基于多线程的socket通信和进程池线程池
  4. JPA 2.1:不同步的持久性上下文
  5. Qt学习笔记-使用QStyleFactory::create()变换风格
  6. 哈夫曼算法(最优二叉树)
  7. css实现图片虚化_什么? CSS 阴影竟然还有这种骚操作 ?
  8. 转:Android应用开发性能优化完全分析
  9. HTTP/HTTPS 01-不同状态码含义
  10. oxite “传入的路由无效”解决方案
  11. Oracle Flash Storage System新版手册集
  12. Atitit 最近十年来until2018软件开发领域的趋势 艾龙总结 attilax大盘点总结历史与趋势 1. Keyword sec title 2 2. 语言本身: 2 2.1. 工业标准 2
  13. Photoshop插件--创建中间调通道蒙板--脚本开发--PS插件
  14. linux系统设置中文
  15. 怎么修改照片文件的大小?教你一招改变图片大小尺寸
  16. 麻雀虽小,五脏俱全 - Java工具类库 - Hutool
  17. 自动化构建java应用实战
  18. Python安全工具编写-pcap流量包重放
  19. RIDE中testcase的edit界面显示异常/空白
  20. Python语言实现机器学习

热门文章

  1. 怎么把项目提交到git服务器,git 命令提交项目到git服务器
  2. 点滴积累-从object中取值
  3. 计算机组成原理控制器,计算机组成原理控制器.ppt
  4. springBoot_配置_yaml文件值获取
  5. 记录java使用POI实现word模板数据填充
  6. FSGAN:一种基于对抗生成网络的换脸术
  7. PLAN: 入门题目
  8. windows共享文件夹(目录)(SMB服务)
  9. 【PS-1】关于图层
  10. 程序员不要以为技术牛逼就行了,这些你得知道的职场潜规则,助你一路高升