目標(biāo)是爬取2000年到2016年的電影,并進(jìn)行數(shù)據(jù)分析。
本文適合新手
下面以2016年的電影為例:
這是我們需要爬取的網(wǎng)頁鏈接:
https://movie.douban.com/tag/2016
進(jìn)入網(wǎng)頁
按Fn+F12,我們就能看到:
通過正則表達(dá)式解析獲取數(shù)據(jù):
pattern = re.compile('<table width=".*?<div class="pl2">.*?>(.*?)</a>.*?class="pl">(.*?)</p>'
+ '.*?<span class="rating_nums">(.*?)</span>.*?class="pl">(.*?)</span>', re.S)
items = re.findall(pattern, html)
實(shí)現(xiàn)循環(huán)翻頁
我們可以發(fā)現(xiàn)
第一頁的網(wǎng)址為:https://movie.douban.com/tag/2016?start=0&type=T
第二頁的網(wǎng)址為:https://movie.douban.com/tag/2016?start=20&type=T
第三頁的網(wǎng)址為:https://movie.douban.com/tag/2016?start=40&type=T
……
=.= 得到規(guī)律,跳轉(zhuǎn)到下一頁只需將start加20;
代碼如下:
def main(start):
url = 'https://movie.douban.com/tag/2007?start='+str(start)+'&type=T'
html = get_one_page(url)
if __name__ == '__main__':
for i in range(196):
main(i*20)
range中的數(shù)即為頁數(shù)。
寫入文檔
利用json.dumps()將dict轉(zhuǎn)化成str格式。
def write_to_file(content):
with open('2007.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False) + '\n')
源代碼
import requests
from requests.exceptions import RequestException
import re
import json
def get_one_page(url):
try:
response = requests.get(url)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
def parse_one_page(html):
pattern = re.compile('<table width=".*?<div class="pl2">.*?>(.*?)</a>.*?class="pl">(.*?)</p>'
+ '.*?<span class="rating_nums">(.*?)</span>.*?class="pl">(.*?)</span>', re.S)
items = re.findall(pattern, html)
for item in items:
yield {
'title': item[0].split("/")[0],
'time': item[1].split("/")[0],
'actor': item[1].split("/")[1:],
'average': item[2],
'content': item[3],
}
def write_to_file(content):
with open('2016.txt', 'a', encoding='utf-8') as f:
f.write(json.dumps(content, ensure_ascii=False) + '\n')
f.close()
def main(start):
url = 'https://movie.douban.com/tag/2016?start='+str(start)+'&type=T'
html = get_one_page(url)
for item in parse_one_page(html):
print(item)
write_to_file(item)
if __name__ == '__main__':
for i in range(84, 194):
main(i*20)
記事本如圖:
接著把2000年到2015年的數(shù)據(jù)都爬取下來。
嗯。方法很蠢。
把記事本中的文字導(dǎo)入excel
發(fā)揮自己強(qiáng)大的excel技能你就能得到
數(shù)據(jù)分析
我在excel里制作了圖表。
我們可以得到2000年以來,電影數(shù)量逐年遞增,電影質(zhì)量卻呈現(xiàn)下降的趨勢,評價人數(shù)則上下波動。
進(jìn)行篩選還可以得到高分熱評電影,高分冷門電影……
再也不用糾結(jié)周末要看什么電影啦[捂臉]??