查看原文
其他

过年观影指南(一)

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王碧琪

文字编辑:钱梦璇

技术总编:张   邯


之前在《Python爬虫之selenium爬取国际自然科学基金数据库(一)》介绍了selenium的初步使用,在《selenium登录豆瓣》中用selenium自动登录了豆瓣,今天小编打算用selenium来下载豆瓣电影的预告片。程序写好之后,只需更改输入的搜索内容即可按照自己的需求,看着电脑自行下载,十分痛快!最近的《唐人街探案3》就要上映了,先来看看刘昊然精彩的预告片吧~

首先使用webdriver进入豆瓣电影网页。

from selenium import webdriverCHROME_DRIVER="F:\\ chromedriver.exe" #填写放置chromedriver的路径driver=webdriver.Chrome(executable_path=CHROME_DRIVER)driver.set_window_position(0,0)driver.maximize_window()url='https://movie.douban.com/'driver.get(url) #进入豆瓣电影网页

然后进行检索,把光标放在搜索框中,在搜索框中输入想要搜索的电影名称,如“唐人街探案3”,按下回车键进行检索。

from selenium.webdriver.common.keys import Keys #引入键盘动作模块driver.implicitly_wait(10) # 隐性等待,最长等10秒 driver.find_element_by_xpath('//*[@id="inp-query"]').click() #鼠标放到搜索键上driver.find_element_by_xpath('//*[@id="inp-query"]').send_keys("唐人街探案3") #输入电影名称driver.find_element_by_xpath('//*[@id="inp-query"]').send_keys(Keys.ENTER) #按下回车键

接着,向下滚动鼠标滑轮,点击第一个搜索结果,再点击“预告片”,就进入了想要得到的视频的总链接了。

from selenium.webdriver.common.by import By #引入定位寻找模块from selenium.webdriver.common.keys import Keys #引入键盘动作模块from selenium.webdriver import ActionChains #引入鼠标行为模块
driver.implicitly_wait(10) # 隐性等待,最长等10秒 driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div[1]/div[1]/div/div[1]/a').click() #点击第一个搜索结果driver.execute_script('window.scrollTo(0,1000)') #向下滑动鼠标driver.find_element_by_xpath('//*[@id="related-pic"]/h2/span/a[1]').click() #点击预告片driver.implicitly_wait(10) # 隐性等待,最长等10秒
tovideo_url=driver.current_urlprint(tovideo_url) #显示当前链接

结果为:

https://movie.douban.com/subject/27619748/trailer#trailer


现在进入了预告片的总链接,接下来想得到每一个预告片的视频。小编尝试从这个网页上找链接,找不到,于是考虑进入每一个视频的网页里,进行二次爬取。需要先从预告片总链接里找到每一个预告片视频对应的分链接,以便进行二次抓取。

首先分析网页源代码,获取每个分链接对应的xpath路径。


想要得到这个元素对应的文本信息,如果直接print,结果显示为selenium对象,无法显示元素内的信息,此时需要使用text方法。

video_href_list=driver.find_elements_by_xpath('//div[@class="mod"][1]/ul[1]/li/p[1]/a') #定位预告片视频的xpathprint(video_href_list) #返回结果是selenium对象,无法显示内容

结果是:

vititle=[]for i in video_href_list:vititle.append(i.text) #将视频的标题放到vititle中print(vititle)

结果是:

至此得到了视频的标题文字,现在想要得到每个视频对应的链接,分析源代码发现是该元素对应的一个href属性。那么现在想做一件用xpath来提取元素属性的事情,在xpath解析中可以这样得到:'//div[@class="mod"][1]/ul[1]/li/p[1]/a/@href',可是这一方法并不适用于selenium,这里需要使用get_attribute()方法得到相应的元素属性。

vilist =[]for i in video_href_list: vilist.append(i.get_attribute("href")) #将href放到vilist中print(vilist)

结果是:

至此就得到了每一个预告片视频对应的链接了。完整程序如下:

###selenium下载豆瓣电影 预告片from selenium import webdriverfrom selenium.webdriver.common.by import By #引入定位寻找模块from selenium.webdriver.common.keys import Keys #引入键盘动作模块from selenium.webdriver import ActionChains #引入鼠标行为模块

CHROME_DRIVER="F:\\ chromedriver.exe" #填写放置chromedriver的路径driver=webdriver.Chrome(executable_path=CHROME_DRIVER) driver.set_window_position(0,0)driver.maximize_window()url='https://movie.douban.com/'driver.get(url) #进入豆瓣电影网页
driver.implicitly_wait(10) # 隐性等待,最长等10秒 driver.find_element_by_xpath('//*[@id="inp-query"]').click() #鼠标放到搜索键上driver.find_element_by_xpath('//*[@id="inp-query"]').send_keys("唐人街探案3") #输入电影名称driver.find_element_by_xpath('//*[@id="inp-query"]').send_keys(Keys.ENTER) #按下回车键driver.implicitly_wait(10) # 隐性等待,最长等10秒 driver.find_element_by_xpath('//*[@id="root"]/div/div[2]/div[1]/div[1]/div[1]/div[1]/div/div[1]/a').click() #点击第一个搜索结果driver.execute_script('window.scrollTo(0,1000)') #向下滑动鼠标driver.find_element_by_xpath('//*[@id="related-pic"]/h2/span/a[1]').click() #点击预告片driver.implicitly_wait(10) # 隐性等待,最长等10秒
tovideo_url=driver.current_urlprint(tovideo_url) #显示当前链接 video_href_list=driver.find_elements_by_xpath('//div[@class="mod"][1]/ul[1]/li/p[1]/a') #定位预告片视频的xpathprint(video_href_list) #返回结果是selenium对象,无法显示内容
vilist =[]vititle=[]for i in video_href_list: vilist.append(i.get_attribute("href")) #得到element的href属性 vititle.append(i.text) #得到element的文本内容print(vilist)print(vititle)driver.quit()

在下一篇推文中,我们将进入每一链接,进行二次抓取,下载一下今年贺岁片《唐人街探案3》的预告片视频,敬请期待~



对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
      egenmore隐藏功能——进制转换

相遇insobs,如暗室逢灯

数据可视化之地理坐标系

SFI:Stata与Python的数据交互手册(一)
Stata模拟构建朋友圈
一个粉丝的疑惑—— local和scalar
新的一年,效率满满~(下)

自科基金项目信息爬取

rename group批量修改变量名

小命令,大不同——insobs插入新值

新的一年,效率满满~(上)

圆蛋快乐
BvD最后一弹——宏观数据宝典
一招搞定并购数据
多图“预警”(二)

您的圣诞礼物到了,请注意查收

BvD数据库介绍之Oriana

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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