查看原文
其他

本文作者:王碧琪文字编辑:孙晓玲技术总编:张 邯农历2019年就要结束了,小伙伴们2019年的新年愿望完成了多少呢?2020年我们继续努力哦,生活一直往前走,我们也要有进步呢!在《过年观影指南(一)》中我们介绍了键入电影名称,进入豆瓣电影的预告片页面,今天我们继续爬取,进入每一个预告片的网页中,保存对应的mp4文件。上篇文章中我们得到了vilist:['https://movie.douban.com/trailer/256037/#content','https://movie.douban.com/trailer/257599/#content','https://movie.douban.com/trailer/257286/#content','https://movie.douban.com/trailer/253948/#content']现在我们进入第一个链接,分析其源代码。利用查找“mp4”,我们发现源代码中的第二处mp4即为视频所对应的链接。现在我们分析一下它所对应的xpath,通过分析可得其路径是://video/source,我们所需的是该元素对应的src属性。我们在xpathhelper中验证一下,键入//video/source/@src:确认路径分析无误后,我们开始驱动chromedriver进行操作。from selenium import webdriverfrom selenium.webdriver.common.by import By #引入定位寻找模块CHROME_DRIVER="F:\\chromedriver.exe"driver=webdriver.Chrome(executable_path=CHROME_DRIVER)url='https://movie.douban.com/trailer/255271/#content'driver.get(url)driver.implicitly_wait(10) # 隐性等待,最长等10秒 mp4=driver.find_element_by_xpath("//video/source").get_attribute("src") #定位mp4print(mp4)结果为:http://vt1.doubanio.com/202001220915/20eb96bf46f75a104585c29cc86d5c44/view/movie/M/402560037.mp4得到了视频对应的真实链接,我们想要把它保存下来,可以使用requests库来获取。我们需要设置保存路径以及文件名,这里使用withopen语句,文件名设置为上篇文章中得到的vititle中的名称,模式设置为“wb”,表示以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。这样我们就可以把该链接对应的内容保存下来了。import requestsr=requests.get(mp4) #下载视频#设置保存路径以及文件名:with open(f'e://mp4//唐人街探案3 预告片1:“闹东京”版.mp4','wb') as f: f.write(r.content)这里是只下载了一个预告片,我们想要得到所有的预告片,只需套用一个循环,对vilist中的每一个链接分别进行操作。我们设置一个空列表mp4list用来接收mp4的真实链接。设置一个循环算子n对多个视频进行循环,并且方便填入文件名。在每次下载完成后,都要退出chromedriver,以便在下一次重新驱动。完整程序如下:###############二次selenium操作############from selenium import webdriverfrom selenium.webdriver.common.by import By #引入定位寻找模块import requests #用于下载视频n=0 #定义mp4循环算子for vi in vilist: #对每一个预告片网页链接进行循环 CHROME_DRIVER="F:\\chromedriver_win32/chromedriver.exe" driver=webdriver.Chrome(executable_path=CHROME_DRIVER) url=vi driver.get(url) driver.implicitly_wait(10) # 隐性等待,最长等10秒 mp4=driver.find_element_by_xpath("//video/source").get_attribute("src") #定位mp4 print(mp4) r=requests.get(mp4) #下载mp4 with open(f'e://mp4//{vititle[n]}.mp4','wb') as f: f.write(r.content) if n

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存