from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import requests
#设置无界面模式
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
class VideoCrawl(object):
video_box=[]#收集video真正的url
def __init__(self,url):
self.driver=webdriver.Chrome(executable_path=r"C:\Program Files\python\Lib\site-packages\selenium\webdriver\chrome\chromedriver.exe",options=chrome_options)#设置无界面模式
self.driver.get(url)
#程序运行完毕,析构函数关闭selenium
def __del__(self):
print("爬取结束。。。。。",len(VideoCrawl.video_box),VideoCrawl.video_box)
self.driver.close()
def run(self):
self.get_detail_info()
#获取列表页所有详情页的url
def get_detail_info(self):
detail_info = self.driver.find_elements_by_xpath('//a[@class="video-wrap statpid"]')
detail_url=[]
for i in detail_info:
detail_url.append(i.get_attribute('href'))#获取视频页url
video_playtime_list=self.driver.find_elements_by_xpath('//span[@class="video-duration"]')
video_playtime_list=[i.text for i in video_playtime_list]
for res in zip(detail_url,video_playtime_list):
playtime=res[1].split(":")[0]
# print("playtime--------",playtime)
if int(res[1].split(":")[0])<=5:#播放时间小于5分钟的要
# print(res[0],"解析的url",playtime)
self.parse_video(res[0],res[1])
else:
pass
#解析详情页
def parse_video(self,url,t):
self.driver.get(url)
videoobj = self.driver.find_elements_by_xpath('//video')
video_url=videoobj[0].get_attribute('src')
title=self.driver.find_elements_by_xpath('//h1[@class="video-title"]')[0].text
print('video_url--------',video_url,title,t)
#保存video到本地
self.save_video(video_url,title,t)
#类变量统计video_url
VideoCrawl.video_box.append(video_url)
#保存,请求video_url,二进制保存为mp4
def save_video(self,url,title,t):
filename="video"+title+"-"+t.replace(":","")+".mp4"
video=requests.get(url).content
with open(filename,"wb") as file:
file.write(video)
print(f"{filename}写入文件完毕")
if __name__ == '__main__':
crawl=VideoCrawl('https://v.huya.com/cat/7')
crawl.run()
|