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