爬取 B站 “蔡徐坤 篮球”

文章目录

    • 一、前期准备
    • 二、代码实施

一、前期准备

  1. 观察页面确定爬取步骤
    本节打算使用前节学习的 selenium 实现自动爬取
    在这里插入图片描述
    观察页面确定搜索框和搜索按钮,通过键入“蔡徐坤 篮球”,跳转到我们需要爬取的页面
from bs4 import BeautifulSoup
from selenium import webdriver # 引入浏览器驱动
from selenium.webdriver.common.by import By
# 这两个指定使用显示等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec
# 拿到浏览器对象
browser = webdriver.Chrome()
browser.get('https://www.bilibili.com/')
# 指定最长等待时间
WAIT = WebDriverWait(browser,10)
# 这里使用 By.XPATH 和 By.CSS_SELECTOR 一样
input = WAIT.until(Ec.presence_of_element_located((By.XPATH,'//*[@id="banner_link"]/div/div/form/input')))
# input = WAIT.until(Ec.presence_of_element_located((By.CSS_SELECTOR,'#banner_link > div > div > form > input')))
submit = WAIT.until(Ec.element_to_be_clickable((By.XPATH,'//*[@id="banner_link"]/div/div/form/button')))input.send_keys('蔡徐坤 篮球')
submit.click()

如果这里突然弹出一个登录框,将搜索按钮给挡住了
这里手动刷一下可以,也可以在代码中加一个点击“首页”操作,进行刷新,这样也可以实现接下来的搜索操作
在这里插入图片描述

import requests
from bs4 import BeautifulSoup
from selenium import webdriver # 引入浏览器驱动
from selenium.webdriver.common.by import By
# 这两个指定使用显示等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec# 拿到浏览器对象
browser = webdriver.Chrome()
browser.get('https://www.bilibili.com/')WAIT = WebDriverWait(browser,10)
# 如果被那个登陆框挡住了,借助 "首页" 按钮实现刷新操作
index = WAIT.until(Ec.element_to_be_clickable((By.CSS_SELECTOR,'#primary_menu > ul > li.home > a > div')))
index.click()input = WAIT.until(Ec.presence_of_element_located((By.XPATH,'//*[@id="banner_link"]/div/div/form/input')))
submit = WAIT.until(Ec.element_to_be_clickable((By.XPATH,'//*[@id="banner_link"]/div/div/form/button')))input.send_keys('蔡徐坤 篮球')
submit.click()
  1. 确定爬取内容
    标题,视频链接,观看次数,弹幕数量,上传时间,up 主
    在这里插入图片描述

二、代码实施

  1. 需要引用的模块
from bs4 import BeautifulSoup# 防止由于页面刷新不出来,所以引入超时模块捕获异常
from selenium.common.exceptions import TimeoutExceptionfrom selenium import webdriver # 引入浏览器驱动
from selenium.webdriver.common.by import By # 借助 By 模块进行使用# 这两个指定使用显示等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec# 使用Excel进行读写操作
import xlwt
import xlrd
from xlutils.copy import copy
  1. 拿到总共有多少视频页数,同时获取第一页的网页内容
def search(url,name):try:print('开始访问b 站....')browser.get(url)# 如果被那个登陆框挡住了,借助 "首页" 按钮实现刷新操作index = WAIT.until(Ec.element_to_be_clickable((By.CSS_SELECTOR, '#primary_menu > ul > li.home > a > div')))index.click()input = WAIT.until(Ec.presence_of_element_located((By.XPATH, '//*[@id="banner_link"]/div/div/form/input')))# input = WAIT.until(Ec.presence_of_element_located((By.CSS_SELECTOR,'#banner_link > div > div > form > input')))submit = WAIT.until(Ec.element_to_be_clickable((By.XPATH, '//*[@id="banner_link"]/div/div/form/button')))input.send_keys('蔡徐坤 篮球')submit.click()# 跳转到新的窗口print('跳转到新窗口')all_h = browser.window_handlesbrowser.switch_to.window(all_h[1])  # 获取到第二个窗口# 处理获取的网页内容get_source(browser.page_source,name)# 获取最大页数total = WAIT.until(Ec.presence_of_element_located((By.CSS_SELECTOR, '#all-list > div.flow-loader > div.page-wrap > div > ul > li.page-item.last > button')))return int(total.text)# 由于网速的原因,所以刷新网页可能需要时间,所以设置超时按钮,超时的话迭代执行该操作except TimeoutException:return search()
  1. 获取下一页内容
def next_page(page,name):try:print('获取第'+ str(page)+'页数据:')next_btn = WAIT.until(Ec.element_to_be_clickable((By.CSS_SELECTOR,'#all-list > div.flow-loader > div.page-wrap > div > ul > li.page-item.next > button')))next_btn.click()# 判断这段文本是否和传入的页码 page 相匹配WAIT.until(Ec.text_to_be_present_in_element((By.CSS_SELECTOR,'#all-list > div.flow-loader > div.page-wrap > div > ul > li.page-item.active > button'),str(page)))get_source(browser.page_source,name)# 有时候可能网速卡,在刷到某一页的时候数据加载不出来# 可以来个异常捕,刷新一下,再递归一下except TimeoutException:browser.refresh()return next_page(page,name)

这里需要注意需要判断传入的页码和实际所在的页码是否匹配
注意确保传入的 page 是 str 类型,因此强制转换下
Ec.text_to_be_present_in_element 用来检测某段文本是否存在某元素中
在这里插入图片描述
4. 完整代码

from bs4 import BeautifulSoup
# 防止由于页面刷新不出来,所以引入超时模块捕获异常
from selenium.common.exceptions import TimeoutException
from selenium import webdriver # 引入浏览器驱动
from selenium.webdriver.common.by import By # 借助 By 模块进行使用
# 这两个指定使用显示等待
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as Ec
# 使用Excel进行读写操作
import xlwt
import xlrd
from xlutils.copy import copybrowser = webdriver.Chrome()
# 指定显示等待的最长等待时间
WAIT = WebDriverWait(browser, 10)
# 执行搜索操作,拿到操作内容
def search(url,name):try:print('开始访问b 站....')browser.get(url)# 如果被那个登陆框挡住了,借助 "首页" 按钮实现刷新操作index = WAIT.until(Ec.element_to_be_clickable((By.CSS_SELECTOR, '#primary_menu > ul > li.home > a > div')))index.click()input = WAIT.until(Ec.presence_of_element_located((By.XPATH, '//*[@id="banner_link"]/div/div/form/input')))# input = WAIT.until(Ec.presence_of_element_located((By.CSS_SELECTOR,'#banner_link > div > div > form > input')))submit = WAIT.until(Ec.element_to_be_clickable((By.XPATH, '//*[@id="banner_link"]/div/div/form/button')))input.send_keys('蔡徐坤 篮球')submit.click()# 跳转到新的窗口print('跳转到新窗口')all_h = browser.window_handlesbrowser.switch_to.window(all_h[1])  # 获取到第二个窗口# 处理获取的网页内容get_source(browser.page_source,name)# 获取最大页数total = WAIT.until(Ec.presence_of_element_located((By.CSS_SELECTOR, '#all-list > div.flow-loader > div.page-wrap > div > ul > li.page-item.last > button')))return int(total.text)except TimeoutException:return search()def next_page(page,name):try:print('获取第'+ str(page)+'页数据:')next_btn = WAIT.until(Ec.element_to_be_clickable((By.CSS_SELECTOR,'#all-list > div.flow-loader > div.page-wrap > div > ul > li.page-item.next > button')))next_btn.click()# 判断这段文本是否和传入的页码 page 相匹配WAIT.until(Ec.text_to_be_present_in_element((By.CSS_SELECTOR,'#all-list > div.flow-loader > div.page-wrap > div > ul > li.page-item.active > button'),str(page)))get_source(browser.page_source,name)# 有时候可能网速卡,在刷到某一页的时候数据加载不出来# 可以来个异常捕,刷新一下,再递归一下except TimeoutException:browser.refresh()return next_page(page,name)# 对爬取的结果进行解析
def get_source(html,name):soup = BeautifulSoup(html,'lxml')rows = soup.find(class_='video-list clearfix').find_all('li')boards = []for row in rows:board = {}board['title'] = row.find('a').get('title')board['href'] = row.find('a').get('href')board['watch-num'] = row.find(class_='so-icon watch-num').textboard['icon-time'] = row.find(class_='so-icon time').textboard['icon-hide'] = row.find(class_='so-icon hide').textboard['up-name'] = row.find(class_='up-name').stringboards.append(board)write_excel(boards, name)def write_excel(boards,name):workbook = xlrd.open_workbook(name)sheets = workbook.sheet_names()worksheet = workbook.sheet_by_name(sheets[0])rows_old = worksheet.nrowsnew_workbook = copy(workbook)new_worksheet = new_workbook.get_sheet(0)i = 0for borad in boards:print(borad)n = i + rows_oldnew_worksheet.write(n, 0, borad['title'])new_worksheet.write(n, 1, borad['href'])new_worksheet.write(n, 2, borad['watch-num'])new_worksheet.write(n, 3, borad['icon-time'])new_worksheet.write(n, 4, borad['icon-hide'])new_worksheet.write(n, 5, borad['up-name'])i += 1new_workbook.save(name)# 初始化 Excel
def excel_write(str):# 设置要存入的 Excel 表book = xlwt.Workbook(encoding='utf-8')sheet = book.add_sheet('蔡徐坤打篮球')into = ['名称','网页链接','观看次数','上传时间','弹幕数量','UP 主']for i in range(len(into)):sheet.write(0,i,into[i])book.save(str)def main(name):url = 'https://www.bilibili.com/'try:total = search(url,name)print("一共:" + str(total) + "页" )for i in range(2,(int(total)+1)):next_page(i,name)finally:browser.close()if __name__ == '__main__':Excel_name = '蔡徐坤打篮球.xls'excel_write(Excel_name)main(Excel_name)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44238.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ikun请进|爱心代码表白蔡徐坤来了

实现效果如下 话不多说&#xff0c;直接代码全给&#xff0c;以下&#xff1a; <!DOCTYPE html> <html><head><title></title><script src"js/jquery.min.js"></script></head><style>* {padding: 0;margin:…

HTML基于蔡徐坤的打飞机游戏源码

正文: 坤坤一直都是非常火的&#xff0c;所以坤坤的真爱粉就开发出了这个游戏源码&#xff0c;有兴趣的自行去体验了。 程序: wwegr.lanzouw.com/iPUKM07wpakf 图片:

计算机弹奏蔡徐坤,用了多年键盘才发现,CTRL键跟蔡徐坤有关,细思极恐!

原标题&#xff1a;用了多年键盘才发现&#xff0c;CTRL键跟蔡徐坤有关&#xff0c;细思极恐&#xff01; 自从电脑出现以后&#xff0c;我们就在享受电脑带来的便利。而我们在使用电脑的时候就需要键盘来进行打字&#xff0c;所以我们想要完整的使用电脑键盘是少不了的。 而小…

html蔡徐坤邀请你打篮球源码,蔡徐坤给IKUN“讲笑话”,想邀请粉丝打篮球,网友:你打球像...

说到最近非常“火”的一位流量顶级明星&#xff0c;蔡徐坤绝对算得上是非常具有争议性的一个明星了&#xff0c;而因为前段时间潘长江老师不认识蔡徐坤的事件&#xff0c;使得蔡徐坤的粉丝跟网友们互撕了起来&#xff0c;之后这件事就这样因为蔡徐坤的道歉而慢慢消下去了&#…

图片转为字符串(蔡徐坤之舞动人生)

一、直接看效果 源代码图像&#xff1a; 结果图像&#xff08;转为彩色字符串&#xff09;&#xff1a; 2、上代码 解释&#xff1a;下面的path是视频路径&#xff0c;结果就会显示如上图所示&#xff1b;想要黑白效果自需要将代码下面的&#xff08;b&#xff0c;g&#xff0…

Python画蔡徐坤 附源码

首先看效果图 复制粘贴即可运行 from turtle import * from math import *# 高级椭圆参数方程&#xff08;颜色&#xff09;&#xff0c;sita为逆时针旋转角度 def ty_c(x, y, sita, a, b, p, q, c):fillcolor(c)si 2 * pi / 100penup()goto(x a * cos(sita), y a * sin(si…

蔡徐坤游戏HTML,JS制作蔡徐坤打篮球小游戏(鸡你太美?)

一、前提: 和我之前写的 QT小球游戏 差不多(指的是实现方法)。 更新: 应网友要求,更新了背景音乐:只因你太美(鸡你太美).mp3 + 其他小更新部分。 背景音乐(若打开无音乐,请刷新重试): 整体界面(index.html) 二、解析: 1:Game.js: 11.包括背景图的绘制,砖块,积分榜 //…

Css简单动画实现蔡徐坤跳舞

(学习css动画突发奇想做的。) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Co…

诗圣杜甫不同时期的代表作

杜甫一生大致分为四个时期。 中青年时期 青年时&#xff0c;作为官三代的杜甫并不缺钱&#xff0c;四处游历&#xff0c;与李白、高适唱和、仙游&#xff0c;成为佳话。这个时期杜甫的作品热血豪迈&#xff0c;气势蓬勃。代表作首推《望岳》&#xff1a; 岱宗夫如何&#xf…

【唐诗学习】一、古诗概述

一、古诗概述 为什么要学习古诗词&#xff1f; 古诗词可以陶冶情操&#xff0c;传承文化诗词&#xff0c;其实就是古代的流行歌曲&#xff0c;它们记录着一个个时代的变迁&#xff0c;是历史的旋律。还有一点很重要&#xff1a;同样是记录历史&#xff0c;史书是国家视角&…

唐诗宋词大全 API 接口

唐诗宋词大全 API 接口&#xff0c;支持 40 万数据全文检索。 1. 产品功能 中文全数量级唐诗宋诗宋词数据&#xff1b;总计近 40 万条数据&#xff1b;数据持续更新与维护&#xff1b;全接口支持 HTTPS&#xff08;TLS v1.0 / v1.1 / v1.2 / v1.3&#xff09;&#xff1b;全面…

中国最伟大的现实主义诗人:杜甫的一生

杜甫(712年2月12日&#xff5e;770年)&#xff0c;字子美&#xff0c;自号少陵野老&#xff0c;唐代诗人&#xff0c;与李白合称“李杜”。生于河南巩县&#xff0c;原籍湖北襄阳。 家世背景 杜甫出身于京兆杜氏&#xff0c;乃北方的大士族。其远祖为汉武帝有名的酷吏杜周(&a…

【Python古诗词鉴赏小程序】千古绝唱,精选中国最美古诗句,经典咏流传~

导语 中国有礼仪之大&#xff0c;故称夏&#xff1b;有服章之美&#xff0c;谓之华。华夏&#xff0c;是世界于我民族的赞誉&#xff0c;是炎黄子孙于自 己的永世骄傲。 所有文章完整的素材源码都在&#x1f447;&#x1f447; 粉丝白嫖源码福利&#xff0c;请移步至CSDN社区…

诗圣杜甫长啥样?AI技术神还原

本文转载自腾讯网 万里桥西一草堂&#xff0c;百花潭水即沧浪。杜甫住了3年零9个月的草堂是什么样子&#xff1f;诗圣杜甫又长啥样&#xff1f;AI人工智能技术为你还原。 一提起诗圣杜甫&#xff0c;大多数读者都会想起他的《茅屋为秋风所破歌》&#xff0c;一个瘦骨嶙峋、忧…

经典古诗文与人工智能创作诗歌 之诗三百(AI)

水陆草木之花,可爱者甚蕃。晋陶渊明独爱菊。自李唐来,世人甚爱牡丹。予独爱莲之出淤泥而不染,濯清涟而不妖,中通外直,不蔓不枝,香远益清,亭亭净植,可远观而不可亵玩焉。出自宋代周敦颐的《爱莲说》 宋代描写荷花的古诗&#xff1a; 小池 【作者】杨万里 【朝代】宋 泉眼无声惜…

AI写诗

引言&#xff1a;自然语言处理是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此&#xff0c;这一领域的研究将涉及自然语言&#xff0c;…

LangChain:使用自然语言查询数据库

目录 前言 LangChain介绍 为什么选择LangChain LangChain的结构 代理 SQL Database Agent 数据库模式和资源 导入必要的库 连接到数据库&#xff1a; 设置 LLM、工具包和代理执行器&#xff1a; 使用自然语言查询数据库&#xff1a; 完整代码示例&#xff1a; 结论…

如何在ONLYOFFICE v7.3中创建一个联系表单

自从ONLYOFFICE7.3强势更新版本以来&#xff0c;我一直都在为大家做一些测试&#xff0c;测试它的新功能&#xff0c;今天呢&#xff0c;又给大家带来一次新的测试&#xff0c;这次主要测试ONLYOFFICE7.3版本后的创建新的表单&#xff0c;我们来测试一下效果怎么样。 ONLYOFFIC…

chatgpt赋能python:Python配置Geany教程

Python配置Geany教程 作为一名拥有10年python编程经验的工程师&#xff0c;我发现Geany是一款非常适合Python编程的编辑器&#xff0c;因为它简单易用、轻量级和可定制性极强。在这篇文章中&#xff0c;我将向大家介绍如何在Geany中配置Python环境&#xff0c;以便更好地进行P…

fastadmin插件开发

微信插件开发&#xff0c;集成到fastadmin&#xff0c;使用如下命令 php think addon -a chat_gpt -c create 查看后台 自动生成如下目录 install.sql数据库文件 CREATE TABLE IF NOT EXISTS __PREFIX__mydemo_list (id int(10) NOT NULL AUTO_INCREMENT COMMENT ID,pid int(…