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