python爬蟲案例:抓取網(wǎng)易新聞

此文屬于入門級級別的爬蟲,老司機(jī)們就不用看了。

本次主要是爬取網(wǎng)易新聞,包括新聞標(biāo)題、作者、來源、發(fā)布時間、新聞?wù)摹?/p>

首先我們打開163的網(wǎng)站,我們隨意選擇一個分類,這里我選的分類是國內(nèi)新聞。然后鼠標(biāo)右鍵點擊查看源代碼,發(fā)現(xiàn)源代碼中并沒有頁面正中的新聞列表。這說明此網(wǎng)頁采用的是異步的方式。也就是通過api接口獲取的數(shù)據(jù)。

那么確認(rèn)了之后可以使用F12打開谷歌瀏覽器的控制臺,點擊 Network,我們一直往下拉,發(fā)現(xiàn)右側(cè)出現(xiàn)了:"… special/00804KVA/cm_guonei_03.js? … "之類的地址,點開Response發(fā)現(xiàn)正是我們要找的api接口。

可以看到這些接口的地址都有一定的規(guī)律:“cm_guonei_03.js”、“cm_guonei_04.js”,那么就很明顯了:

http://temp.163.com/special/00804KVA/cm_guonei_0(*).js

上面的鏈接也就是我們本次抓取所要請求的地址。

接下來只需要用到的python的兩個庫:

1.requests

2.json

3.BeautifulSoup

requests庫就是用來進(jìn)行網(wǎng)絡(luò)請求的,說白了就是模擬瀏覽器來獲取資源。

由于我們采集的是api接口,它的格式為json,所以要用到j(luò)son庫來解析。BeautifulSoup是用來解析html文檔的,可以很方便的幫我們獲取指定div的內(nèi)容。

下面開始編寫我們爬蟲:

第一步先導(dǎo)入以上三個包:


接著我們定義一個獲取指定頁碼內(nèi)數(shù)據(jù)的方法:


這樣子就得到每個頁碼對應(yīng)的內(nèi)容列表:


之后通過分析數(shù)據(jù)可知下圖圈出來的則是需要抓取的標(biāo)題、發(fā)布時間以及新聞內(nèi)容頁面。

既然現(xiàn)在已經(jīng)獲取到了內(nèi)容頁的url,那么接下來開始抓取新聞?wù)摹?/p>

在抓取正文之前要先分析一下正文的html頁面,找到正文、作者、來源在html文檔中的位置。

我們看到文章來源在文檔中的位置為:id = “ne_article_source” 的 a 標(biāo)簽。

作者位置為:class = “ep-editor” 的 span 標(biāo)簽。

正文位置為:class = “post_text” 的 div 標(biāo)簽。

下面采集這三個內(nèi)容的代碼:


到此為止我們所要抓取的所有數(shù)據(jù)都已經(jīng)采集了。

那么接下來當(dāng)然是把它們保存下來,為了方便我直接采取文本的形式來保存。下面是最終的結(jié)果:


格式為json字符串,“標(biāo)題” : [ ‘日期’, ‘url’, ‘來源’, ‘作者’, ‘正文’ ]。

要注意的是目前實現(xiàn)的方式是完全同步的,線性的方式,存在的問題就是采集會非常慢。主要延遲是在網(wǎng)絡(luò)IO上,下次可以升級為異步IO,異步采集,有興趣的可以關(guān)注下次的文章。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容