需求:
豆瓣top250電影:https://movie.douban.com/top250
爬取 電影的名字 評分 引言 詳情頁的url 1-10頁 保存到csv文件當(dāng)中 (下圖綠色框內(nèi)容為所需爬去內(nèi)容)
總體思路把握:
需求拆解:
需要爬去1-10頁(共計250部電影信息)
存在遍歷每一頁獲得每一頁數(shù)據(jù)的需求
爬取 電影的名字 評分 引言 詳情頁的url
最后我們要得到的是250部電影,每部電影包含的信息是Name, Score, Quote, Links
可以認(rèn)為每一部電影信息就是一個字典:{‘Name’ : '...', 'Score': '...', 'Quote': '...', ‘Links’: '...'}
以字典Key-Value? 形式表示腐芍。
而所有電影信息可以是列表嵌套字典的格式除盏,如下:
[{電影1字典}, {電影2字典},.....,{電影250字典}]
保存到CSV文件中
因為每部電影信息是以字典形式存儲信息的屋吨。
因此可以使用csv.Dictwriter(object, titile) 方法直接寫入字典信息
需求拆解總結(jié):
每部電影信息都是一個字典揭糕,每一個html頁面有25部電影 --> 第一層遍歷后獲取每一頁25部電影的列表: [{該頁第1部電影信息}赚导, {該頁第2部電影信息}, ... , {該頁第25部電影信息}]
然后將這一頁的結(jié)果列表加入到總體結(jié)果列表尚粘,然后遍歷下一頁面 --> 第二層遍歷獲取總共10頁所有信息
分析1-10頁URL地址規(guī)律
對于目標(biāo)URL進(jìn)行分析:
第一頁:https://movie.douban.com/top250
第二頁:https://movie.douban.com/top250?start=25&filter=
第三頁:https://movie.douban.com/top250?start=50&filter=
第四頁:https://movie.douban.com/top250?start=75&filter=
那么反過頭去重新試試第一頁是否也符合規(guī)律:https://movie.douban.com/top250?start=0&filter=
發(fā)現(xiàn)第一頁也是適用的,那么很容易總結(jié)出規(guī)律蝇庭,每一頁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)
分析頁面
鼠標(biāo)右鍵-->檢查哮内,找到所需爬去內(nèi)容在element中的位置盗棵,class='info'
在網(wǎng)頁源代碼中尋宅此標(biāo)簽,并確認(rèn)所有需要爬去的內(nèi)容是否在其中:
每一個網(wǎng)頁北发,25部電影信息纹因,分別在25個 li標(biāo)簽內(nèi):而我們定義的<div class="info"> 存在于每一個 li 子標(biāo)簽下
分級如下:li --> <div class="item"> --> <div class="info">? ? (相同顏色箭頭為同一級兄弟標(biāo)簽關(guān)系,平級)
獲取網(wǎng)頁源代碼
使用requests模塊請求琳拨,并獲取html網(wǎng)頁源代碼并轉(zhuǎn)換成字符串格式
匹配最小父級標(biāo)簽
匹配并列子級標(biāo)簽 & 定義子級標(biāo)簽內(nèi)解析公式(xpath)&遍歷子級獲取需求數(shù)據(jù) (黃色框選內(nèi)容)
遍歷每一頁網(wǎng)頁(1-10頁)
保存數(shù)據(jù)至文檔
完整代碼如下:
執(zhí)行結(jié)果:
用excel打開: