成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

新聞爬蟲倒騰筆記

April / 1198人閱讀

摘要:新聞爬蟲在列表頁(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調(diào)用網(wǎng)頁(yè)

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

相關(guān)文章

  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0
  • 分分鐘教你用node.js寫個(gè)爬蟲

    摘要:爬蟲介紹二爬蟲的分類通用網(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和爬蟲方面...

    fanux 評(píng)論0 收藏0
  • 從0-1打造最強(qiáng)性能Scrapy爬蟲集群

    摘要:包括爬蟲編寫爬蟲避禁動(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é)合程序代碼分解說...

    vincent_xyb 評(píng)論0 收藏0
  • Python3 基于asyncio的新聞爬蟲思路

    摘要:開始,加入了新的語法,和這兩個(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寫爬蟲是非常方便的,爬取的...

    zhangyucha0 評(píng)論0 收藏0
  • 基于 Node+express 爬蟲的數(shù)據(jù) API,爬一套自己的api數(shù)據(jù)(2)

    摘要:目前半島局勢(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框架排行、妹紙福利、搞笑視頻、段子笑話、...

    beanlam 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<