需求:
豆瓣top250電影:https://movie.douban.com/top250
爬取 電影的名字 評(píng)分 引言 詳情頁(yè)的url 1-10頁(yè) 保存到csv文件當(dāng)中 (下圖綠色框內(nèi)容為所需爬去內(nèi)容)

總體思路把握:


需求拆解:
需要爬去1-10頁(yè)(共計(jì)250部電影信息)
存在遍歷每一頁(yè)獲得每一頁(yè)數(shù)據(jù)的需求
爬取 電影的名字 評(píng)分 引言 詳情頁(yè)的url
最后我們要得到的是250部電影,每部電影包含的信息是Name, Score, Quote, Links
可以認(rèn)為每一部電影信息就是一個(gè)字典:{‘Name’ : '...', 'Score': '...', 'Quote': '...', ‘Links’: '...'}
以字典Key-Value? 形式表示。
而所有電影信息可以是列表嵌套字典的格式,如下:
[{電影1字典}, {電影2字典},.....,{電影250字典}]
保存到CSV文件中
因?yàn)槊坎侩娪靶畔⑹且宰值湫问酱鎯?chǔ)信息的。
因此可以使用csv.Dictwriter(object, titile) 方法直接寫入字典信息
需求拆解總結(jié):
每部電影信息都是一個(gè)字典,每一個(gè)html頁(yè)面有25部電影 --> 第一層遍歷后獲取每一頁(yè)25部電影的列表: [{該頁(yè)第1部電影信息}, {該頁(yè)第2部電影信息}, ... , {該頁(yè)第25部電影信息}]
然后將這一頁(yè)的結(jié)果列表加入到總體結(jié)果列表,然后遍歷下一頁(yè)面 --> 第二層遍歷獲取總共10頁(yè)所有信息
分析1-10頁(yè)URL地址規(guī)律
對(duì)于目標(biāo)URL進(jìn)行分析:
第一頁(yè):https://movie.douban.com/top250
第二頁(yè):https://movie.douban.com/top250?start=25&filter=
第三頁(yè):https://movie.douban.com/top250?start=50&filter=
第四頁(yè):https://movie.douban.com/top250?start=75&filter=
那么反過(guò)頭去重新試試第一頁(yè)是否也符合規(guī)律:https://movie.douban.com/top250?start=0&filter=
發(fā)現(xiàn)第一頁(yè)也是適用的,那么很容易總結(jié)出規(guī)律,每一頁(yè)25部電影,以start = PageNum * 25 作為偏移量,修改URL地址即可
可以使用如下代碼進(jìn)行遍歷url:
base_url = 'https://movie.douban.com/top250?start={}&filter='
for i in range(10):
????req_url =?base_url .format ( i * 25)
分析頁(yè)面
鼠標(biāo)右鍵-->檢查,找到所需爬去內(nèi)容在element中的位置,class='info'

在網(wǎng)頁(yè)源代碼中尋宅此標(biāo)簽,并確認(rèn)所有需要爬去的內(nèi)容是否在其中:

每一個(gè)網(wǎng)頁(yè),25部電影信息,分別在25個(gè) li標(biāo)簽內(nèi):而我們定義的<div class="info"> 存在于每一個(gè) li 子標(biāo)簽下

分級(jí)如下:li --> <div class="item"> --> <div class="info">? ? (相同顏色箭頭為同一級(jí)兄弟標(biāo)簽關(guān)系,平級(jí))

獲取網(wǎng)頁(yè)源代碼
使用requests模塊請(qǐng)求,并獲取html網(wǎng)頁(yè)源代碼并轉(zhuǎn)換成字符串格式

匹配最小父級(jí)標(biāo)簽

匹配并列子級(jí)標(biāo)簽 & 定義子級(jí)標(biāo)簽內(nèi)解析公式(xpath)&遍歷子級(jí)獲取需求數(shù)據(jù) (黃色框選內(nèi)容)

遍歷每一頁(yè)網(wǎng)頁(yè)(1-10頁(yè))

保存數(shù)據(jù)至文檔

完整代碼如下:


執(zhí)行結(jié)果:

用excel打開:
