python爬虫练习selenium+BeautifulSoup,爬b站搜索内容保存excel
off999 2024-12-01 02:18 30 浏览 0 评论
一、简介
前面文章已经介绍了selenium库使用,及浏览器提取信息相关方法。参考:python爬虫之selenium库
现在目标要求,用爬虫通过浏览器,搜索关键词,将搜索到的视频信息存储在excel表中。
二、创建excel表格,以及chrome驱动
n = 1
word = input('请输入要搜索的关键词:')
driver = webdriver.Chrome()
wait = WebDriverWait(driver,10)
excl = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = excl.add_sheet('b站视频:'+word, cell_overwrite_ok=True)
sheet.write(0, 0, '名称')
sheet.write(0, 1, 'up主')
sheet.write(0, 2, '播放量')
sheet.write(0, 3, '视频时长')
sheet.write(0, 4, '链接')
sheet.write(0, 5, '发布时间')三、创建定义搜索函数
里面有button_next 为跳转下一页的功能,之所有不用By.CLASS_NAME定位。看html代码可知
<button class="vui_button vui_pagenation--btn vui_pagenation--btn-side">下一页</button>class名称很长,而且有空格,如果selenium用By.CLASS_NAME定位,有空格会报错:selenium.common.exceptions.NoSuchElementException: Message: no such element
所以这里用By.CSS_SELECTOR方法定位。
def search():
driver.get("https://www.bilibili.com/")
input = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'nav-search-input')))
button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'nav-search-btn')))
input.send_keys(word)
button.click()
print('开始搜索:'+word)
windows = driver.window_handles
driver.switch_to.window(windows[-1])
get_source()
#第1页跳转第2页
button_next = driver.find_element(By.CSS_SELECTOR,'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.flex_center.mt_x50.mb_x50 > div > div > button:nth-child(11)')
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video-list.row > div:nth-child(1) > div > div.bili-video-card__wrap.__scale-wrap')))
button_next.click()
get_source()四、定义跳转下一页函数
这里有调转下一页函数,那为什么在上面搜索函数也有下一页功能,因为分析代码。
#第2页的CSS_SELECTOR路径
#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.flex_center.mt_x50.mb_x50 > div > div > button:nth-child(11)
#后面页面的CSS_SELECTOR路径
#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.flex_center.mt_x50.mb_lg > div > div > button:nth-child(11)第1页的CSS_SELECTOR和后面的页面的CSS_SELECTOR的不一样,所以把第1页跳第2页单独加在了上面搜索函数中。
def next_page():
button_next = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.flex_center.mt_x50.mb_lg > div > div > button:nth-child(11)')))
button_next.click()
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video-list.row > div:nth-child(1) > div > div.bili-video-card__wrap.__scale-wrap')))
get_source()五、定义获取页面代码函数
上面定义的函数都有get_source()函数,这个函数就是现在需要创建的,用途获取页面代码,传入BeautifulSoup
def get_source():
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
save_excl(soup)六、获取元素并存到excel表
通过BeautifulSoup循环获取页面信息,并存到创建好的excel表中。
def save_excl(soup):
list = soup.find(class_='video-list row').find_all(class_="bili-video-card")
for item in list:
# print(item)
video_name = item.find(class_='bili-video-card__info--tit').text
video_up = item.find(class_='bili-video-card__info--author').string
video_date = item.find(class_='bili-video-card__info--date').string
video_play = item.find(class_='bili-video-card__stats--item').text
video_times = item.find(class_='bili-video-card__stats__duration').string
video_link = item.find('a')['href'].replace('//', 'https://')
print(video_name, video_up, video_play, video_times, video_link, video_date)
global n
sheet.write(n, 0, video_name)
sheet.write(n, 1, video_up)
sheet.write(n, 2, video_play)
sheet.write(n, 3, video_times)
sheet.write(n, 4, video_link)
sheet.write(n, 5, video_date)
n = n +1七、定义main函数,循环获取跳转每一页
这里默认是10页的数据,后面就不获取了,可以自行调整页面数。最后保存表名。
def main():
search()
for i in range(1,10):
next_page()
i = i + 1
driver.close()
if __name__ == '__main__':
main()
excl.save('b站'+word+'视频.xls')八、最终代码执行效果
这里CSS_SELECTOR路径,我这里尽量的在最底层,所以比较长,因为短路径,经常性等待时间不够长,没有加载所有页面,提取不到信息而报错。
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import xlwt
import time
n = 1
word = input('请输入要搜索的关键词:')
driver = webdriver.Chrome()
wait = WebDriverWait(driver,10)
excl = xlwt.Workbook(encoding='utf-8', style_compression=0)
sheet = excl.add_sheet('b站视频:'+word, cell_overwrite_ok=True)
sheet.write(0, 0, '名称')
sheet.write(0, 1, 'up主')
sheet.write(0, 2, '播放量')
sheet.write(0, 3, '视频时长')
sheet.write(0, 4, '链接')
sheet.write(0, 5, '发布时间')
def search():
driver.get("https://www.bilibili.com/")
input = wait.until(EC.presence_of_element_located((By.CLASS_NAME, 'nav-search-input')))
button = wait.until(EC.element_to_be_clickable((By.CLASS_NAME, 'nav-search-btn')))
input.send_keys(word)
button.click()
print('开始搜索:'+word)
windows = driver.window_handles
driver.switch_to.window(windows[-1])
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,
'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video.i_wrapper.search-all-list')))
get_source()
print('开始下一页:')
button_next = driver.find_element(By.CSS_SELECTOR,
'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.flex_center.mt_x50.mb_x50 > div > div > button:nth-child(11)')
button_next.click()
#time.sleep(2)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video-list.row > div:nth-child(1) > div > div.bili-video-card__wrap.__scale-wrap > div > div > a > h3')))
get_source()
print("完成")
def next_page():
button_next = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,
'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.flex_center.mt_x50.mb_lg > div > div > button:nth-child(11)')))
button_next.click()
print("开始下一页")
#time.sleep(5)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,
'#i_cecream > div > div:nth-child(2) > div.search-content > div > div > div.video-list.row > div:nth-child(1) > div > div.bili-video-card__wrap.__scale-wrap > div > div > a > h3')))
get_source()
print("完成")
def save_excl(soup):
list = soup.find(class_='video-list row').find_all(class_="bili-video-card")
for item in list:
# print(item)
video_name = item.find(class_='bili-video-card__info--tit').text
video_up = item.find(class_='bili-video-card__info--author').string
video_date = item.find(class_='bili-video-card__info--date').string
video_play = item.find(class_='bili-video-card__stats--item').text
video_times = item.find(class_='bili-video-card__stats__duration').string
video_link = item.find('a')['href'].replace('//', 'https://')
print(video_name, video_up, video_play, video_times, video_link, video_date)
global n
sheet.write(n, 0, video_name)
sheet.write(n, 1, video_up)
sheet.write(n, 2, video_play)
sheet.write(n, 3, video_times)
sheet.write(n, 4, video_link)
sheet.write(n, 5, video_date)
n = n +1
def get_source():
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
save_excl(soup)
def main():
search()
for i in range(1,10):
next_page()
i = i + 1
driver.close()
if __name__ == '__main__':
main()
excl.save('b站'+word+'视频.xls')执行输入MV执行结果:
在文件夹也生成了excel文件表
打开,信息保存完成
同理,输入其他关键词,也可以。
以上,简单爬取搜索信息就完成了,如果要在服务器上隐藏运行,参考我上篇文章:python爬虫之selenium库
相关推荐
- win10电脑经常蓝屏是什么原因
-
动不动就蓝屏,那说明整个系统是有问题的。建议重新安装一下,或者是装一个Win7试一下。老是蓝屏的话,直接影响到办公,生活,娱乐的感觉体验。并且系统不稳定,保存的文件随时都可能面临的崩溃,丢失的风险。...
- 360游戏个人中心(360游戏个人中心官网)
-
360游戏中心的实名认证信息一经注册或补充就是永久有效的,?不可以随意进行修改。360游戏中心认证具体流程:①打开电脑中的浏览器,然后登录到360网站,接着登录自己的360账号。②然后在【个人中心】中...
- 360极速浏览器使用方法(360极速浏览器使用技巧)
-
以下是设置360浏览器极速版的步骤:1.打开360浏览器极速版,在右上角的“设置”按钮下,选择“选项”或者直接按快捷键“Alt+F”。2.在“常规”选项卡下,可以设置浏览器的默认搜索引擎、启动...
- 联想电脑设置u盘启动的步骤(联想电脑设置成u盘启动)
-
联想电脑设置U盘启动两种方法方法一:通过启动快捷键1、如果是UEFI启动盘,可以通过启动快捷键选择U盘启动,首先插入UEFIU盘启动盘,然后启动过程中按下F12或Fn+F12组合键。2、这时候会弹出...
- 电脑桌面图标不见了怎么设置
-
方法一:1、首先按下快捷键“ctrl+shift+esc”打开任务管理器。2、然后点击左上角的文件,选择“运行新任务”。3、输入“explorer.exe”点击确定等待重启即可。方法二:1...
- 惠普暗影精灵7(惠普暗影精灵7配置)
-
惠普暗影精灵7的开机步骤如下:1.确保电源已连接并正常工作。将电源适配器插入电源插座,并连接到电脑上。2.打开电脑上的盖子。通常情况下,你需要打开盖子才能看到电源按钮。3.查找电源按钮。在大多数...
- 笔记本电脑开不了机怎么办如何解决
-
1、如果笔记本无法开机首先尝试调亮电脑屏幕亮度。2、开机按F2键,进入BIOS界面查看是否正常显示。3、外接显示器,按组合键切换显示。4、移除所有外接装置,取出加装的内存或其它硬件后再开机确认。如果以...
- 如何禁止电脑自动更新(怎么禁止电脑自动更新)
-
建议将自动更新关闭,用软件更新,自己的时间自己做主。下载超级兔子,让她帮助你下载补丁。你选择快速检测后,按安装按钮,她会自动帮助你下载安装,并且不需要重启。到目前为止,使用超级兔子打补丁全部成功(对于...
- 如何重装系统win7视频教程(如何重装系统win7具体步骤)
-
不需要重装知识点延伸,更换CPU-BIOS设置1)未更改过bios设置,确认主板支持cpu型号直接插上即可,bios会自适应2)之前更改过bios设置,在更换cpu之前应需要将bios恢复出厂...
- 惠普售后维修官网电话(惠普官网维修中心电话)
-
要找到惠普的售后服务,你可以通过以下几种方式进行联系。首先,你可以访问惠普的官方网站,在网站上找到售后服务的相关信息,包括联系电话和在线支持。其次,你可以拨打惠普的客户服务热线,向客服人员咨询并安排售...
- 笔记本迈克菲怎么卸载(笔记本迈克菲怎么卸载不了)
-
戴尔笔记本电脑上的迈克菲中心可以卸载,迈克菲中心为一款杀毒软件,如果自身笔记本电脑不需要可以进行卸载。迈克菲中心卸载步骤:1、打开桌面“此电脑”。2、在“此电脑”界面中点击选择“卸载或更改程序”。3、...
- windows10怎么进入修复模式(win10如何进入修复系统)
-
1、 进入WindowsRE恢复模式。非正常启动三次,可进入WindowsRE恢复模式。具体操作方法如下:按住电源按钮10秒钟以关闭设备。再次按电源按钮以打开设备。看到Windo...
- 现在哪个浏览器好用(现在哪种浏览器好用)
-
一、谷歌浏览器谷歌浏览器是公认最好用的,这个可以从市场占有率看出端倪,超过三分之二的用户使用谷歌浏览器。Chrome浏览器以简洁快速著称,不管是普通用户还是开发人员,chrome浏览器都是首选。Chr...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
