摘要:本次主要是爬取網(wǎng)易新聞,包括新聞標(biāo)題作者來(lái)源發(fā)布時(shí)間新聞?wù)?。既然現(xiàn)在已經(jīng)獲取到了內(nèi)容頁(yè)的,那么接下來(lái)開(kāi)始抓取新聞?wù)摹?/p>
此文屬于入門(mén)級(jí)級(jí)別的爬蟲(chóng),老司機(jī)們就不用看了。
本次主要是爬取網(wǎng)易新聞,包括新聞標(biāo)題、作者、來(lái)源、發(fā)布時(shí)間、新聞?wù)?/strong>。
首先我們打開(kāi)163的網(wǎng)站,我們隨意選擇一個(gè)分類(lèi),這里我選的分類(lèi)是國(guó)內(nèi)新聞。然后鼠標(biāo)右鍵點(diǎn)擊查看源代碼,發(fā)現(xiàn)源代碼中并沒(méi)有頁(yè)面正中的新聞列表。這說(shuō)明此網(wǎng)頁(yè)采用的是異步的方式。也就是通過(guò)api接口獲取的數(shù)據(jù)。
那么確認(rèn)了之后可以使用F12打開(kāi)谷歌瀏覽器的控制臺(tái),點(diǎn)擊Network,我們一直往下拉,發(fā)現(xiàn)右側(cè)出現(xiàn)了:"... special/00804KVA/cm_guonei_03.js? .... "之類(lèi)的地址,點(diǎn)開(kāi)Response發(fā)現(xiàn)正是我們要找的api接口。
可以看到這些接口的地址都有一定的規(guī)律:“cm_guonei_03.js”、 “cm_guonei_04.js”,那么就很明顯了:
http://temp.163.com/special/0...*).js
上面的連接也就是我們本次抓取所要請(qǐng)求的地址。
接下來(lái)只需要用到的python的兩個(gè)庫(kù):
requests
json
BeautifulSoup
requests庫(kù)就是用來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求的,說(shuō)白了就是模擬瀏覽器來(lái)獲取資源。
由于我們采集的是api接口,它的格式為json,所以要用到j(luò)son庫(kù)來(lái)解析。BeautifulSoup是用來(lái)解析html文檔的,可以很方便的幫我們獲取指定div的內(nèi)容。
下面開(kāi)始編寫(xiě)我們爬蟲(chóng):
第一步先導(dǎo)入以上三個(gè)包:
import json import requests from bs4 import BeautifulSoup
接著我們定義一個(gè)獲取指定頁(yè)碼內(nèi)數(shù)據(jù)的方法:
def get_page(page): url_temp = "http://temp.163.com/special/00804KVA/cm_guonei_0{}.js" return_list = [] for i in range(page): url = url_temp.format(i) response = requests.get(url) if response.status_code != 200: continue content = response.text # 獲取響應(yīng)正文 _content = formatContent(content) # 格式化json字符串 result = json.loads(_content) return_list.append(result) return return_list
這樣子就得到每個(gè)頁(yè)碼對(duì)應(yīng)的內(nèi)容列表:
之后通過(guò)分析數(shù)據(jù)可知下圖圈出來(lái)的則是需要抓取的標(biāo)題、發(fā)布時(shí)間以及新聞內(nèi)容頁(yè)面。
既然現(xiàn)在已經(jīng)獲取到了內(nèi)容頁(yè)的url,那么接下來(lái)開(kāi)始抓取新聞?wù)摹?/p>
在抓取正文之前要先分析一下正文的html頁(yè)面,找到正文、作者、來(lái)源在html文檔中的位置。
我們看到文章來(lái)源在文檔中的位置為:id = "ne_article_source" 的 a 標(biāo)簽。
作者位置為:class = "ep-editor" 的 span 標(biāo)簽。
正文位置為:class = "post_text" 的 div 標(biāo)簽。
下面試采集這三個(gè)內(nèi)容的代碼:
def get_content(url): source = "" author = "" body = "" resp = requests.get(url) if resp.status_code == 200: body = resp.text bs4 = BeautifulSoup(body) source = bs4.find("a", id="ne_article_source").get_text() author = bs4.find("span", class_="ep-editor").get_text() body = bs4.find("div", class_="post_text").get_text() return source, author, body
到此為止我們所要抓取的所有數(shù)據(jù)都已經(jīng)采集了。
那么接下來(lái)當(dāng)然是把它們保存下來(lái),為了方便我直接采取文本的形式來(lái)保存。下面是最終的結(jié)果:
格式為json字符串,“標(biāo)題” : [ ‘日期’, ‘url’, ‘來(lái)源’, ‘作者’, ‘正文’ ]。
要注意的是目前實(shí)現(xiàn)的方式是完全同步的,線性的方式,存在的問(wèn)題就是采集會(huì)非常慢。主要延遲是在網(wǎng)絡(luò)IO上,下次可以升級(jí)為異步IO,異步采集,有興趣的可以關(guān)注下次的文章。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42498.html
摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:前言開(kāi)發(fā)爬蟲(chóng)是一件有趣的事情。的可配置爬蟲(chóng)是基于的,因此天生是支持并發(fā)的。遵守協(xié)議這個(gè)默認(rèn)是開(kāi)啟的。的可配置爬蟲(chóng)降低了爬蟲(chóng)的開(kāi)發(fā)時(shí)間,增加了爬蟲(chóng)開(kāi)發(fā)效率,完善了工程化水平,將爬蟲(chóng)工程師從日常的繁瑣配置工作中解放出來(lái)。 前言 開(kāi)發(fā)爬蟲(chóng)是一件有趣的事情。寫(xiě)一個(gè)程序,對(duì)感興趣的目標(biāo)網(wǎng)站發(fā)起HTTP請(qǐng)求,獲取HTML,解析HTML,提取數(shù)據(jù),將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)或者存為CSV、JSON等格式,再...
摘要:前言開(kāi)發(fā)爬蟲(chóng)是一件有趣的事情。的可配置爬蟲(chóng)是基于的,因此天生是支持并發(fā)的。的可配置爬蟲(chóng)降低了爬蟲(chóng)的開(kāi)發(fā)時(shí)間,增加了爬蟲(chóng)開(kāi)發(fā)效率,完善了工程化水平,將爬蟲(chóng)工程師從日常的繁瑣配置工作中解放出來(lái)。前言 開(kāi)發(fā)爬蟲(chóng)是一件有趣的事情。寫(xiě)一個(gè)程序,對(duì)感興趣的目標(biāo)網(wǎng)站發(fā)起HTTP請(qǐng)求,獲取HTML,解析HTML,提取數(shù)據(jù),將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)或者存為CSV、JSON等格式,再用自己熟悉的語(yǔ)言例如Python對(duì)...
摘要:學(xué)習(xí)網(wǎng)絡(luò)爬蟲(chóng)主要分個(gè)大的版塊抓取,分析,存儲(chǔ)另外,比較常用的爬蟲(chóng)框架,這里最后也詳細(xì)介紹一下。網(wǎng)絡(luò)爬蟲(chóng)要做的,簡(jiǎn)單來(lái)說(shuō),就是實(shí)現(xiàn)瀏覽器的功能。 Python學(xué)習(xí)網(wǎng)絡(luò)爬蟲(chóng)主要分3個(gè)大的版塊:抓取,分析,存儲(chǔ) 另外,比較常用的爬蟲(chóng)框架Scrapy,這里最后也詳細(xì)介紹一下。 首先列舉一下本人總結(jié)的相關(guān)文章,這些覆蓋了入門(mén)網(wǎng)絡(luò)爬蟲(chóng)需要的基本概念和技巧:寧哥的小站-網(wǎng)絡(luò)爬蟲(chóng),當(dāng)我們?cè)跒g覽器中輸入...
摘要:開(kāi)始,加入了新的語(yǔ)法,和這兩個(gè)關(guān)鍵字,也成了標(biāo)準(zhǔn)庫(kù),這對(duì)于我們寫(xiě)異步的程序來(lái)說(shuō)就是如虎添翼,讓我們輕而易舉的實(shí)現(xiàn)一個(gè)定向抓取新聞的異步爬蟲(chóng)。網(wǎng)址池異步爬蟲(chóng)的所有流程不能單單用一個(gè)循環(huán)來(lái)完成,它是多個(gè)循環(huán)至少兩個(gè)相互作用共同完成的。 showImg(https://segmentfault.com/img/bVbsjjR?w=742&h=487); Python寫(xiě)爬蟲(chóng)是非常方便的,爬取的...
閱讀 3621·2021-11-22 15:11
閱讀 4776·2021-11-18 13:15
閱讀 2771·2019-08-29 14:08
閱讀 3646·2019-08-26 13:49
閱讀 3148·2019-08-26 12:17
閱讀 3349·2019-08-26 11:54
閱讀 3183·2019-08-26 10:58
閱讀 2100·2019-08-26 10:21