摘要:新聞爬蟲在列表頁(yè)獲取列表和時(shí)間材料,開發(fā)人員工具,插件,,安裝包使用開發(fā)人員工具分析網(wǎng)站右鍵或打開,刷新載入打開頁(yè)簽,點(diǎn)選第二排的小漏斗,點(diǎn)入頁(yè)面,因?yàn)樾侣劧加斜粰z索到的需要,所以一般情況下都可以在第一個(gè)文檔中找到需要的信息。
新聞爬蟲1.0 在列表頁(yè)獲取列表和時(shí)間 材料:Pycharm,Chrome開發(fā)人員工具,infoLite插件,bs4,request 安裝包
pip install requests pip install beautifulsoup4使用Chrome開發(fā)人員工具分析網(wǎng)站
右鍵或Ctrl+shift+I打開,F(xiàn)5刷新載入
打開network頁(yè)簽,點(diǎn)選第二排的小漏斗(filter),點(diǎn)入doc頁(yè)面,因?yàn)樾侣劧加斜粰z索到的需要,所以一般情況下都可以在第一個(gè)doc文檔中找到需要的信息。我們現(xiàn)在第一個(gè)目標(biāo)是獲取這個(gè)頁(yè)面里所有的國(guó)內(nèi)新聞標(biāo)題、時(shí)間、鏈接。選擇第一個(gè)doc,通過responce看看是否有所需信息。
3.再通過查看header頁(yè)面可以看到信息被得到的方式是GET,這說明我們可以通過get調(diào)用,而通過第一排的Request URL我們就可以知道想要得到網(wǎng)站信息的目標(biāo)url是什么。
request是URL的擷取套件,可以用postputgetdelete來存取網(wǎng)絡(luò)資源
import requests newurl = "目標(biāo)網(wǎng)站" res = requests.get(newurl) res.encoding = "utf-8" # 申明編碼避免res內(nèi)容出現(xiàn)亂碼使用BeautifulSoup4進(jìn)行加工
通過request的get得到了網(wǎng)頁(yè)的所有內(nèi)容,但是還有很多不需要用到的樣式語言等,本來可以用正則表達(dá)式來進(jìn)行刪選,但是這里使用第三方包BeautifulSoup4對(duì)原材料進(jìn)行處理。
soup = BeautifulSoup(res.text,"html.parser") # 需要注釋res的類型是HTML,使用parser對(duì)HTML進(jìn)行解析。
這里需要稍微了解一點(diǎn)HTML/CSS里的DOM Tree知識(shí)。
(注:DOM Tree是指通過DOM將HTML頁(yè)面進(jìn)行解析,并生成的HTML tree樹狀結(jié)構(gòu)和對(duì)應(yīng)訪問方法。)
這方面我自己是理解的,但是理解的不透徹講不清。詳參這里
總之,我們所需要的內(nèi)容是在各種各樣的元素中的,它們可能是含有特定標(biāo)簽的HTML元素,也有可能是含有特定CSS屬性的元素。(我所理解的是HTML元素是HTML固有的,結(jié)構(gòu)層次已經(jīng)劃分好了的。而特定CSS屬性的元素則是因?yàn)樘厥獾母袷叫枰O(shè)置的靈活性的一個(gè)元素。一般是通過id和類來設(shè)置。)
select
為了得到特定的元素,使用beautifulsoup4中的select。
使用方法是:
# 含有特定標(biāo)簽的HTML元素 header = soup.select("h1") # 含有特定css屬性的元素 ID header = soup.select("#title") # 含有特定css屬性的元素 class link = soup.select(".link")
select的預(yù)設(shè)方法是傳回一個(gè)list,所以用解開列表的方式解開并且取出來就可以。
使用infoLite插件獲取infoLite插件下載地址
接下來,我們就需要知道爬取目標(biāo)的元素到底是什么。有兩種方法,一是借助infoLite插件,一是借助開發(fā)工具的elements自己查找。為了保證查找的準(zhǔn)確性,兩種方法最好都掌握。
首先是使用infoLite插件,點(diǎn)擊就可以知道元素的類型。但是有時(shí)候情況會(huì)比較復(fù)雜,比如說,會(huì)遇到css類里使用HTML元素的情況。在這種情況下先select CSS 最大共性元素再select出HTML元素。
標(biāo)題
(網(wǎng)頁(yè)其他部分也有h2,可以結(jié)合開發(fā)工具看更清晰。)
時(shí)間
.time
鏈接
URL鏈接可以從上面的DOM Tree看到URL是元素的屬性,所以需要通過開發(fā)工具看。在網(wǎng)頁(yè)的鏈接中通常使用a tag去鏈接其他網(wǎng)頁(yè),而href就是連結(jié)的橋梁。
列表里其實(shí)是一個(gè)字典,利用字典的性質(zhì),用key(href)調(diào)用出鏈接。
完整import requests from bs4 import BeautifulSoup res = requests.get("http://news.sina.com.cn/china/") res.encoding = "utf-8" soup = BeautifulSoup(res.text,"html.parser") for news in soup.select(".news-item"): if len(news.select("h2"))>0: #保證存在,防止遍歷時(shí)輸出空集 h2 = news.select("h2")[0].text #取出內(nèi)容 time = news.select(".time")[0].text a = news.select("a")[0]["href"] print (time,h2,a)
學(xué)習(xí)參考自此網(wǎng)站
新聞爬蟲2.0 抓取新聞內(nèi)頁(yè) 材料:Pycharm,Chrome開發(fā)人員工具,infoLite插件,bs4,request在前面我們已經(jīng)將新聞列表頁(yè)面的所有鏈接都下載下來了,但是還不夠,我們希望可以獲取鏈接所指的各個(gè)單個(gè)新聞的標(biāo)題、來源、時(shí)間以及內(nèi)文。
這里我們從特殊到一般,而用到的方法還是筆記NO.1中對(duì)select的活用,先以一個(gè)鏈接為例。
取得內(nèi)文頁(yè)面和抓取列表頁(yè)面的初始步驟一樣,我們首先要將原材料整個(gè)的放到soup里進(jìn)行一個(gè)剖析,然后再逐個(gè)提取出我們想要的元素。取得頁(yè)面的說明不再贅述。
import requests from bs4 import BeautifulSoup res = requests.get("http://news.sina.com.cn/c/nd/2017-01-04/doc-ifxzczff3681310.shtml") res.encoding = "utf-8" soup = BeautifulSoup(res.text,"html.parser")獲取內(nèi)文標(biāo)題
通過檢查工具得知標(biāo)題是一個(gè)特殊的css屬性標(biāo)簽,ID是artibodyTitle,通過soup的select傳回一個(gè)list,再通過取出list里內(nèi)容的方法取出來。
title= soup.select("#artibodyTitle")[0].text取得來源和時(shí)間
本來想處理時(shí)間,時(shí)間的類是time-source,結(jié)果select回傳的結(jié)果里既有時(shí)間又有來源。使用.text也無法將之分開。
select的回傳列表結(jié)果:
[2017年01月04日09:47
政府網(wǎng)站
]
所以這里要采用contents將時(shí)間和來源取出來。
關(guān)于.contents的幫助文檔說明
tag的.contents屬性可以將tag的子節(jié)點(diǎn)以列表的方式輸出。新聞的時(shí)間精確到日就可以了,對(duì)字符串進(jìn)行切片處理。
time = soup.select(".time-source")[0].contents[:10]
接下來我們要思考如何取出來源,通過檢查工具我們可以看到,來源是在時(shí)間的層級(jí)之下的,這也很好的解釋了為什么用contens處理下來,和來源有關(guān)的東西并沒有發(fā)生變化,因?yàn)樗歉綄倨湎?,并且由一個(gè)span里的a tag控制的。
![Uploading time-source_539741.png . . .]
所以試試用這個(gè)把它select出來
medianame = soup.select(".time-source span a")[0].text取得內(nèi)文
內(nèi)文位于artibody p里,同樣的方法取出。觀察由三個(gè)成分組成,
分隔符、控制符以及我們需要的文字內(nèi)容。通過strip去除控制符,再遍歷輸出
article = soup.select("#artibody p")[:-1]獲得編輯名稱
同理,略
author = soup.select(".article-editor")[0].text.strip("責(zé)任編輯:")
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40845.html
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:爬蟲介紹二爬蟲的分類通用網(wǎng)絡(luò)爬蟲全網(wǎng)爬蟲爬行對(duì)象從一些種子擴(kuò)充到整個(gè),主要為門戶站點(diǎn)搜索引擎和大型服務(wù)提供商采集數(shù)據(jù)。 分分鐘教你用node.js寫個(gè)爬蟲 寫在前面 十分感謝大家的點(diǎn)贊和關(guān)注。其實(shí),這是我第一次在segmentfault上寫文章。因?yàn)槲乙彩乔岸螘r(shí)間偶然之間才開始了解和學(xué)習(xí)爬蟲,而且學(xué)習(xí)node的時(shí)間也不是很長(zhǎng)。雖然用node做過一些后端的項(xiàng)目,但其實(shí)在node和爬蟲方面...
摘要:包括爬蟲編寫爬蟲避禁動(dòng)態(tài)網(wǎng)頁(yè)數(shù)據(jù)抓取部署分布式爬蟲系統(tǒng)監(jiān)測(cè)共六個(gè)內(nèi)容,結(jié)合實(shí)際定向抓取騰訊新聞數(shù)據(jù),通過測(cè)試檢驗(yàn)系統(tǒng)性能。 1 項(xiàng)目介紹 本項(xiàng)目的主要內(nèi)容是分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)。主要有以下幾個(gè)部分來介紹: (1)深入分析網(wǎng)絡(luò)新聞爬蟲的特點(diǎn),設(shè)計(jì)了分布式網(wǎng)絡(luò)新聞抓取系統(tǒng)爬取策略、抓取字段、動(dòng)態(tài)網(wǎng)頁(yè)抓取方法、分布式結(jié)構(gòu)、系統(tǒng)監(jiān)測(cè)和數(shù)據(jù)存儲(chǔ)六個(gè)關(guān)鍵功能。 (2)結(jié)合程序代碼分解說...
摘要:開始,加入了新的語法,和這兩個(gè)關(guān)鍵字,也成了標(biāo)準(zhǔn)庫(kù),這對(duì)于我們寫異步的程序來說就是如虎添翼,讓我們輕而易舉的實(shí)現(xiàn)一個(gè)定向抓取新聞的異步爬蟲。網(wǎng)址池異步爬蟲的所有流程不能單單用一個(gè)循環(huán)來完成,它是多個(gè)循環(huán)至少兩個(gè)相互作用共同完成的。 showImg(https://segmentfault.com/img/bVbsjjR?w=742&h=487); Python寫爬蟲是非常方便的,爬取的...
摘要:目前半島局勢(shì)緊張,朝鮮已進(jìn)行了六次核試驗(yàn),被廣泛認(rèn)為已經(jīng)擁有了核彈頭。另外朝鮮的導(dǎo)彈技術(shù)今年以來快速突破,成功試射了射程可覆蓋美國(guó)本土的洲際彈道導(dǎo)彈。這個(gè)版的內(nèi)容傳到互聯(lián)網(wǎng)上后,迅速刷屏,引起紛紛議論。 SplderApi2 Node-SplderApi2 第二版 基于Node 的網(wǎng)絡(luò)爬蟲 API接口 包括前端開發(fā)日?qǐng)?bào)、kugou音樂、前端top框架排行、妹紙福利、搞笑視頻、段子笑話、...
閱讀 2520·2023-04-25 17:37
閱讀 1203·2021-11-24 10:29
閱讀 3709·2021-09-09 11:57
閱讀 704·2021-08-10 09:41
閱讀 2256·2019-08-30 15:55
閱讀 2822·2019-08-30 15:54
閱讀 1951·2019-08-30 15:53
閱讀 906·2019-08-30 15:43