1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python爬虫实例——中国电影票房(续)

python爬虫实例——中国电影票房(续)

时间:2021-12-18 14:11:13

相关推荐

python爬虫实例——中国电影票房(续)

写在前面

有小可爱私信我说,中国票房和艺恩合并了,上篇代码(/weixin_44690846/article/details/103435069)无法使用了,所以重新改了一下,这次我们使用selenium来获取相关信息。

selenuim简介

Selenium是一个用于Web应用程序自动化测试工具,简单来说就是让电脑像人一样对网页进行点击等操作。

官方中文文档指路:https://python-selenium-zh.readthedocs.io/zh_CN/latest/

观察网页

网址指路:/BoxOffice/BO/Year/index.html

我们需要的数据和上篇博文是一样的,只不过了,我们把时间区间换一下,这次我们获取到,每部电影的名称详情页url类型总票房国家及地区上映日期

分布实现

1.导包

当然第一步还是导入我们所需要的包啦~

import osimport timefrom selenium import webdriverfrom lxml import etreeimport pandas as pd

2.提前创建csv表

local_data='D:/Learn'local_main2=local_data+'/'+'movie2.csv'#设置路径if not os.path.exists(local_main2):data = pd.DataFrame(columns=['电影名称','电影详情页','电影类型','电影票房','国家及地区','上映时间'])data.to_csv(local_main2,index = None,encoding="utf_8_sig")

3.打开所爬取网址

为了使电脑的操作符合人的操作,我们使用time包中的time.sleep()让计算机等待几秒后再进行后面的操作driver.find_element_by_xpath('//nav[@class="box-nav"]/ul/li[2]').click()表示找到此xpath所在标签,并点击如果小可爱们对selenium中如何查找元素不太熟悉,那么可以参考一下前面selenium简介中的中文文档!

driver = webdriver.Chrome() #打开Google浏览器url = '/BoxOffice/' #中国票房urldriver.get(url) #请求urltime.sleep(2) #等待2秒driver.find_element_by_xpath('//nav[@class="box-nav"]/ul/li[2]').click() #点击->票房time.sleep(5)driver.find_element_by_xpath('//ul[@class="bo-left-nav"]/li[6]').click() #点击->年度票房time.sleep(2)

4.获取所需信息并存入csv

for i in range(1,7):driver.find_element_by_xpath('//select[@id="OptionDate"]/option[' + str(i) + ']').click()response = driver.page_source #解析网页selector = etree.HTML(driver.page_source) #解析网页url_0 = selector.xpath('//td[@class="movie-name"]/a/@onclick') #未处理详情页urlurl = [] #处理后详情页urlfor j in range(len(url_0)):url.append('/BoxOffice/MovieStock/movieShow.html?' + url_0[j].split('?')[1].split("'")[0])name = selector.xpath('//td[@class="movie-name"]/a/p/text()') #电影名称movie_type = selector.xpath('//table[@class="bo-table img-table"]//tr/td[3]/text()') #电影类型box_office = selector.xpath('//table[@class="bo-table img-table"]//tr/td[4]/text()') #电影票房country = selector.xpath('//table[@class="bo-table img-table"]//tr/td[7]/text()') #国家及地区time = selector.xpath('//table[@class="bo-table img-table"]//tr/td[8]/text()') #上映时间for i in range(len(url)):data = pd.DataFrame({'电影名称':name[i],'电影详情页':url[i],'电影类型':movie_type[i],'电影票房':box_office[i],'国家及地区':country[i],'上映时间':time[i]},columns=['电影名称','电影详情页','电影类型','电影票房','国家及地区','上映时间'],index=[0])data.to_csv(local_main2,index = None,mode = 'a' ,header= None,sep=',',encoding="utf_8_sig")

到此,我们就已经获得了电影票房哦~

汇总代码

# -*- coding: utf-8 -*-"""Created on Sat Feb 15 11:38:01 @author: chensiyi"""import osimport timefrom selenium import webdriver #导入webdriver模块from lxml import etreeimport pandas as pdlocal_data='D:/Learn'local_main2=local_data+'/'+'movie2.csv'#设置路径if not os.path.exists(local_main2):data = pd.DataFrame(columns=['电影名称','电影详情页','电影类型','电影票房','国家及地区','上映时间'])data.to_csv(local_main2,index = None,encoding="utf_8_sig")driver = webdriver.Chrome() #打开Google浏览器url = '/BoxOffice/' #中国票房urldriver.get(url) #请求urltime.sleep(2) #等待2秒driver.find_element_by_xpath('//nav[@class="box-nav"]/ul/li[2]').click() #点击->票房time.sleep(5)driver.find_element_by_xpath('//ul[@class="bo-left-nav"]/li[6]').click() #点击->年度票房time.sleep(2)for i in range(1,7):driver.find_element_by_xpath('//select[@id="OptionDate"]/option[' + str(i) + ']').click()response = driver.page_source #解析网页selector = etree.HTML(driver.page_source) #解析网页url_0 = selector.xpath('//td[@class="movie-name"]/a/@onclick') #未处理详情页urlurl = [] #处理后详情页urlfor j in range(len(url_0)):url.append('/BoxOffice/MovieStock/movieShow.html?' + url_0[j].split('?')[1].split("'")[0])name = selector.xpath('//td[@class="movie-name"]/a/p/text()') #电影名称movie_type = selector.xpath('//table[@class="bo-table img-table"]//tr/td[3]/text()') #电影类型box_office = selector.xpath('//table[@class="bo-table img-table"]//tr/td[4]/text()') #电影票房country = selector.xpath('//table[@class="bo-table img-table"]//tr/td[7]/text()') #国家及地区time = selector.xpath('//table[@class="bo-table img-table"]//tr/td[8]/text()') #上映时间for i in range(len(url)):data = pd.DataFrame({'电影名称':name[i],'电影详情页':url[i],'电影类型':movie_type[i],'电影票房':box_office[i],'国家及地区':country[i],'上映时间':time[i]},columns=['电影名称','电影详情页','电影类型','电影票房','国家及地区','上映时间'],index=[0])data.to_csv(local_main2,index = None,mode = 'a' ,header= None,sep=',',encoding="utf_8_sig")

大功告成!还有什么问题欢迎小可爱们私信我哦~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。