前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
stars宣告很多小伙伴學習Python程序中會遇到各種煩惱問題解決不了,為此小編建了個群 624440745,
不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
此文屬于入門級級別的爬蟲,老司機們就不用看了,
本次主要是爬取網易新聞,包括新聞標題、作者、來源、發布時間、新聞正文,
首先我們打開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
接著我們定義一個獲取指定頁碼內資料的方法:
復制代碼
1 def get_page(page):
2 url_temp = ‘http://temp.163.com/special/00804KVA/cm_guonei_0{}.js’
3 return_list = []
4 for i in range(page):
5 url = url_temp.format(i)
6 response = requests.get(url)
7 if response.status_code != 200:
8 continue
9 content = response.text # 獲取回應正文
10 _content = formatContent(content) # 格式化json字串
11 result = json.loads(_content)
12 return_list.append(result)
13 return return_list
復制代碼
這樣子就得到每個頁碼對應的內容串列:
在這里插入圖片描述
之后通過分析資料可知下圖圈出來的則是需要抓取的標題、發布時間以及新聞內容頁面,
在這里插入圖片描述
既然現在已經獲取到了內容頁的url,那么接下來開始抓取新聞正文,
在抓取正文之前要先分析一下正文的html頁面,找到正文、作者、來源在html檔案中的位置,
我們看到文章來源在檔案中的位置為:id = “ne_article_source” 的 a 標簽, 作者位置為:class = “ep-editor” 的 span 標簽, 正文位置為:class = “post_text” 的 div 標簽,
下面試采集這三個內容的代碼:
復制代碼
1 def get_content(url):
2 source = ‘’
3 author = ‘’
4 body = ‘’
5 resp = requests.get(url)
6 if resp.status_code == 200:
7 body = resp.text
8 bs4 = BeautifulSoup(body)
9 source = bs4.find(‘a’, id=‘ne_article_source’).get_text()
10 author = bs4.find(‘span’, class_=‘ep-editor’).get_text()
11 body = bs4.find(‘div’, class_=‘post_text’).get_text()
12 return source, author, body
復制代碼
到此為止我們所要抓取的所有資料都已經采集了,
那么接下來當然是把它們保存下來,為了方便我直接采取文本的形式來保存,下面是最終的結果:
在這里插入圖片描述
格式為json字串,“標題” : [ ‘日期’, ‘url’, ‘來源’, ‘作者’, ‘正文’ ],
要注意的是目前實作的方式是完全同步的,線性的方式,存在的問題就是采集會非常慢,主要延遲是在網路IO上,可以升級為異步IO,異步采集,
需要代碼的同學可以添加群624440745
不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/191488.html
標籤:Python
下一篇:使用Python打造一款間諜程式
