前言:
而今姐妹们对“python爬虫爬取图片并保存到本地代码”大概比较关注,大家都需要分析一些“python爬虫爬取图片并保存到本地代码”的相关资讯。那么小编在网摘上收集了一些有关“python爬虫爬取图片并保存到本地代码””的相关内容,希望我们能喜欢,朋友们快快来了解一下吧!1 前言
前面一篇文章实现了根据某管视频链接信息通过解析网站成功爬取视频及字幕。对于某管视频,有好多都是成系列的,今天就主要来写一下爬取系列视频中各视频的链接信息,并保存到本地csv文件中,以便供后续对各视频下载时直接提取本地csv中的链接信息。
2 版本及更改说明
版本:v1.1
更改说明:添加爬取系列视频中各视频链接信息并保存到本地csv文件中的功能。
3 开发环境
Python3和PyCharm
4 网站分析
视频链接信息如上图所示,视频链接信息在标签<a></a>中的<href>属性中,分析各视频链接信息,均包含字符串"watch",可通过检索"watch"信息来获得视频链接信息。
5 编码思路
1) 提供系列视频主页网站地址;
2) 检索watch筛选各视频链接信息;
3) 将各视频链接信息保存到本地csv中。
6 代码实现
代码运行效果如下:
具体代码如下:
# 下载YouTube视频# v1.1 添加列表中各视频地址的提取及保存import requestsfrom bs4 import BeautifulSoupimport osimport timeimport reimport csv# 请求网站,返回页面处理结果def get_html(url): headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"} try: r = requests.get(url,headers) r.raise_for_status() soup = BeautifulSoup(r.text, "html.parser") return soup except: return ""# mp4下载def mp4_download(soup, path,title): print(path + " 视频开始下载。。。。。。") # 查找tr标签,循环判断含有High的高清视频 tr = soup.tbody.find_all("tr") for t in tr: if "High" in str(t): video_link = t.find_all("td")[2].a.get("href") # print(video_link) headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"} r = requests.get(video_link,headers,timeout = 10) with open(path + "\\" + title + ".mp4","wb") as f: f.write(r.content) print(path + " 视频完成下载")# srt下载def srt_download(soup, path,title): print(path + " 字幕开始下载。。。。。。") srt_link = soup.find_all("tbody")[1].tr.find_all("td")[1].input.get("value") # print(srt_link) headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"} r = requests.get(srt_link, headers) with open(path + "\\" + title + ".srt", "w",encoding="utf-8") as f: f.write(r.text) print(path + " 字幕完成下载")# 实现视频和字幕下载def video_download(url, path): url_find = url[:12] + "add" + url[12:] # 请求网站,若访问网站失败,继续请求 soup = get_html(url_find) while soup == "": print("请求网站失败") time.sleep(10) soup = get_html(url_find) print("请求网站成功") # 提取video名称 title = soup.h3.text.replace("|", "") # print(title) # 设置本地下载地址 path = path + "\\" + title if not os.path.exists(path): os.makedirs(path) # 下载video及字幕 mp4_download(soup, path,title) srt_download(soup, path,title)# 将viedo链接保存到本地csv文件中def download_csv(href_list): with open("E:\\YouTube视频\\Python\\0基础学Python视频教程(Telusko)\\0.csv", "w", newline="") as cf: csv_w = csv.writer(cf) header = ["序号", "链接"] csv_w.writerow(header) n = 1 while n <= len(href_list): csv_w.writerow([n, href_list[n - 1]]) n = n + 1if __name__ == '__main__': # 下载文件夹 path = "E:\\YouTube视频\\Python\\0基础学Python视频教程(Telusko)" # 视频列表地址 url = "; list_id = url[url.find("list=") + 5:] soup = get_html(url) while soup == "": print("请求网站失败,再次请求") soup = get_html(url) list = [] aa = soup.find_all("a") for a in aa: if "watch" in str(a): list.append(a.get("href")) list = list[3:] i = 0 href_list = [] while i < len(list): href_list.append("; + list[i]) i = i + 2 # 将viedo链接保存到本地csv文件中 download_csv(href_list) # 读取csv文件 with open("E:\\YouTube视频\\Python\\0基础学Python视频教程(Telusko)\\0.csv") as f: f_csv = csv.reader(f) start = 35 end = 35 while start <= end: for r in f_csv: if r[0] == str(start): # print(r) # print(r[1]) video_download(r[1],path) break start = start + 17 相关学习知识点
csv文件的创建及读写。
8 结束语
本次代码实现了某管系列视频中各视频链接地址的爬取,并保存到本地csv文件,结合前面文章对视频的下载功能,可直接根据本地csv文件中的链接信息进行下载。便于后面尝试进行多线程同时下载多个视频。
将此次编码的过程及源码分享给大家,供大家参考。对于错误的地方,或有更好的建议,希望大家指出来,不胜感激!