天津网站优化收费,织梦网站错位,网站风格主要包括哪些,中山发布最新通知实验17#xff1a;爬虫2 文章目录 实验17#xff1a;爬虫21.实验目标及要求2. 实验主要内容3.实验小结 1.实验目标及要求
#xff08;1#xff09;掌握有关爬虫的包 #xff08;2#xff09;掌握爬虫方法 #xff08;3#xff09;爬取B站卡塔尔世界杯若干视频
2. 实验…实验17爬虫2 文章目录 实验17爬虫21.实验目标及要求2. 实验主要内容3.实验小结 1.实验目标及要求
1掌握有关爬虫的包 2掌握爬虫方法 3爬取B站卡塔尔世界杯若干视频
2. 实验主要内容
代码部分:
import json
import os
import re
import time
import requests
from selenium.webdriver import Edge
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys# 请求头信息
head {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67,Referer: https://www.bilibili.com/video/BV1NG4y1R7re/?spm_id_from333.1007.tianma.1-1-1.clickvd_sourcebd03a18123cf7caa08dcac9d5ef031d6
}# 绑定浏览器事件
web Edge()
web.get(https://www.bilibili.com/)# 爬取视频函数
def DownloadVideo(title,saveName):# 爬取 classcol_3 col_xs_1_5 col_md_2 col_xl_1_7 mb_x40的div下的视频B站网页版一页24个视频if title 1:contents web.find_elements(By.XPATH, (//*[idi_cecream]/div/div[2]/div[2]/div/div/div/div[1]/div/div[classcol_3 col_xs_1_5 col_md_2 col_xl_1_7 mb_x40]))else:contents web.find_elements(By.XPATH, (
//*[idi_cecream]/div/div[2]/div[2]/div/div/div[1]/div[classcol_3 col_xs_1_5 col_md_2 col_xl_1_7 mb_x40]))# 视频编号
j 0
for content in contents[:24]:j 1# 点入视频主页
content.find_element(By.XPATH,(.//div/div[2]/a)).click()# 切换到最后一个网页web.switch_to.window(web.window_handles[-1])time.sleep(2)# 获取网页源代码并找到视频下载地址page web.page_sourcejson_data re.findall(scriptwindow.__playinfo__(.*?)/script, page)[0]json_data json.loads(json_data)# 下载提取视频video_url json_data[data][dash][video][0][backupUrl][0]# 保存视频video_data requests.get(urlvideo_url, headershead).contentwith open(./{}/{}_{}.mp4.format(saveName,title, j), wb) as f:f.write(video_data)time.sleep(2)# 关闭当前网页回到第二个网页web.close()web.switch_to.window(web.window_handles[1])print(成功下载第{}页第{}个视频.format(title, j))
time.sleep(5)# 主函数
def get_target(keyword, page, saveName):
# 在网页搜索栏内输入搜索内容
web.find_element(By.XPATH, (//*[idnav-searchform]/div[1]/input)).send_keys({}.format(keyword),Keys.ENTER)
time.sleep(5)# 创建文件夹os.mkdir(./{}.format(saveName))# 循环获取不同页的视频for i in range(0, page):
# 窗口切换
web.switch_to.window(web.window_handles[-1])
i 1# 调用爬取视频函数
DownloadVideo(i, saveName)# 浏览器事件锁定下一页按钮并点击
if i 1:
time.sleep(5)
web.find_element(By.XPATH, ( //*[idi_cecream]/div/div[2]/div[2]/div/div/div/div[2]/div/div/button[10])).click()
elif 1 i 5:time.sleep(5)web.find_element(By.XPATH, (//*[idi_cecream]/div/div[2]/div[2]/div/div/div[2]/div/div/button[10])).click()
else:time.sleep(5)web.find_element(By.XPATH,
(//*[idi_cecream]/div/div[2]/div[2]/div/div/div[2]/div/div/button[9])).click()if __name__ __main__:
keyword input(请输入要搜索的关键词)
page int(input(请输入爬取的页数))
saveName input(请输入要保存的文件名)
get_target(keyword, page, saveName)实验结果:
3.实验小结
学Python不弄点爬虫总觉得不完整这一次和上一次我使用的都是selenium库进行爬虫但这次也依靠了requests库。一看到实验需要进行输入查找视频内容在我的脑海中只想到了使用selenium库的浏览器事件处理会比较简单一些但是找了很多资料也没能弄明白selenium库如何进行下载视频目前为止只会使用selenium库进行获取B站的视频资料比如up主视频名称播放量等等信息对于如何下载视频还是没能弄明白所以我就使用了requests库进行下载视频的任务发现了结合不同的爬虫的方法进行爬虫可以简便许多果然在学习上还是要进行知识上的汇集使各种方法进行有机集合形成一个简便的解决方式。 实验过程中也是出现了很多的问题最多的问题就是浏览器的xpath路径了不同的页数的下一页按钮还不一样一开始测试循环点击下一页的时候报错了好几次经过刺激摸索发现了问题所在一共分成了三种情况所以我就使用if语句对问题进行解决发现能够成功运行。对于这种xpath路径问题出现了很多次但解决难度不大主要是比较多而麻烦。实验过程中还要不断的进行切换网页因为想要下载B站视频需要点击观看视频从而获取B站视频下载链接所以关闭当前网页切换网页就是很关键的了。