python爬虫实例——中国电影票房
剛好最近在做一個關(guān)于中國電影市場的分析,所以這篇實例就誕生啦!!!
一、觀察網(wǎng)頁
我所爬取的網(wǎng)站是:中國票房——年度票房。
網(wǎng)址甩出來:http://www.cbooo.cn/year?year=2019
我們需要的數(shù)據(jù)是從2015年到2019年,每部電影的名稱、詳情頁url、類型、總票房、國家及地區(qū)、上映日期
點進去的頁面是介個樣子滴~它總共有25條數(shù)據(jù),就是2019年的TOP25!
左上角框出來的地方是可以選擇年份的,我們可以通過它來觀察不同年份間url的相似點。如下圖:我們觀察到他們的網(wǎng)址是有規(guī)律的,即:http://www.cbooo.cn/year?year= + 年份 這樣我們就可以直接獲取到所有的網(wǎng)址
二、分步實現(xiàn)
1.導包
導入我們所需要的包
2.定義獲取數(shù)據(jù)的函數(shù)
因為每年都要請求一遍,所以為了方便,我們將它寫成一個函數(shù),直接調(diào)用,方便我們自己。
此函數(shù)會返回url的網(wǎng)頁源代碼的內(nèi)容,以url='http://www.cbooo.cn/year?year=2019’為例,下圖為get_data后的結(jié)果,得到data后,我們就可以解析它,獲取到我們想要的部分
3.提前創(chuàng)建csv表
local_data='D:/Learn' local_main2=local_data+'/'+'movie.csv'#設(shè)置路徑 if not os.path.exists(local_main2):data = pd.DataFrame(columns=['電影名稱','電影詳情頁','電影類型','電影票房','國家及地區(qū)','上映時間'])data.to_csv(local_main2,index = None,encoding="utf_8_sig")經(jīng)過創(chuàng)建,在D盤下的learn文件夾下就會建好一個名為movie的csv空表。如下圖:
4.獲取近五年url
結(jié)果如下:
5.獲取我們需要的信息
這里我使用的是xpath,使用beautifulsoup也可以達到同樣的效果
6.將獲取的信息存入剛創(chuàng)建的csv
for i in range(len(url)):data = pd.DataFrame({'電影名稱':name[i],'電影詳情頁':url[i],'電影類型':movie_type[i],'電影票房':box_office[i],'國家及地區(qū)':country[i],'上映時間':time[i]},columns=['電影名稱','電影詳情頁','電影類型','電影票房','國家及地區(qū)','上映時間'],index=[0])data.to_csv(local_main2,index = None,mode = 'a' ,header= None,sep=',',encoding="utf_8_sig")至此,我們的電影票房就獲取完成啦!
三、匯總代碼
完整代碼如下:
# -*- coding: utf-8 -*- """ Created on Sat Dec 7 09:57:06 2019@author: chensiyi """import os import requests from lxml import etree import pandas as pdheaders = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) \AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'} cookies = {'SUB':'_2A25wmfkgDeRhGeBI4lcU9irOzD2IHXVQZYdorDV6PUJbkdAKLUvAkW1NRkZNESdNnLdqXAeecDulr43bOma1k9ut'} def get_data(url):r = requests.get(url, headers=headers, cookies=cookies, timeout=30)r.raise_for_status() #查看是否正常,正常返回200,否則返回404等r.encoding='utf-8'return r.textlocal_data='D:/Learn' local_main2=local_data+'/'+'movie.csv'#設(shè)置路徑 if not os.path.exists(local_main2):data = pd.DataFrame(columns=['電影名稱','電影詳情頁','電影類型','電影票房','國家及地區(qū)','上映時間'])data.to_csv(local_main2,index = None,encoding="utf_8_sig")urls=[] for year in range(5):urls.append('http://www.cbooo.cn/year?year={}'.format(2019-year))for url in urls:data = get_data(url)selector = etree.HTML(data)url = selector.xpath('//td[@class="one"]/a/@href') #詳情頁urlname = selector.xpath('//td[@class="one"]/a/@title') #電影名稱movie_type = selector.xpath('//*[@id="tbContent"]//tr//td[2]/text()') #電影類型box_office = selector.xpath('//*[@id="tbContent"]//tr//td[3]/text()') #電影票房country = selector.xpath('//*[@id="tbContent"]//tr//td[6]/text()') #國家及地區(qū)time = selector.xpath('//*[@id="tbContent"]//tr//td[7]/text()') #上映時間for i in range(len(url)):data = pd.DataFrame({'電影名稱':name[i],'電影詳情頁':url[i],'電影類型':movie_type[i],'電影票房':box_office[i],'國家及地區(qū)':country[i],'上映時間':time[i]},columns=['電影名稱','電影詳情頁','電影類型','電影票房','國家及地區(qū)','上映時間'],index=[0])data.to_csv(local_main2,index = None,mode = 'a' ,header= None,sep=',',encoding="utf_8_sig")爬取的數(shù)據(jù)如下(部分):
總結(jié)
以上是生活随笔為你收集整理的python爬虫实例——中国电影票房的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL数据库事务中的行级锁,表级锁,
- 下一篇: go语言代码连接mysql_【mysql