對爬取的網路資訊進行資訊篩選與資訊提取
阿新 • • 發佈:2018-12-13
準備好模組
由於資訊多種多樣,這裡以資訊新聞資訊為例,以beautifulsoup為主re和xpath為輔,分享一下我這幾天的挑選資訊的方法。
-
呼叫beautifulsoup from bs4 import BeautifulSoup soup = BeautifulSoup(html_text, ‘html.parser’)
-
呼叫正則 import re
-
呼叫xpath from lxml import etree
注意,此處省略如何獲取整版網址的資訊,資訊內容如下 html_text = spider(url)
分析大多數新聞資訊的結構
分析介面,尋找程式碼
文章結構體在哪(瀏覽器按f12,選中相應的位置,鎖定程式碼塊):
- 大多數新聞使用article標籤來存放新聞,這個標籤含有上圖的所有資訊 get_news = soup.find_all(‘article’)
- 也可以是含有某個特定屬性的div標籤 soup.find_all(‘div’, {‘class’: ‘某個特點屬性’}) 注意該標籤和屬效能把文章的所有內容都涵蓋,因為前端在處理文章時也是做了程式碼塊限定的
在找到的模組中進行具體資訊提取
- 像上圖這種標籤是遞迴的,沒有其他斷點的,就可以直接獲取資訊
- 獲取本標籤某屬性的值 get_news[0].header.h2.a.attrs[‘href’]
- 獲取本標籤的文字資訊 get_news[0].div.p.text
-
獲取這種本結構獨一無二的標籤最簡單 n_detail = get_news[0].div.p.text
-
獲取這種中有其他我們不想要的資訊時,可以用正則進行再加工處理 n_time = re.finditer(’(.*?)T’, (get_news[n].find(‘time’).attrs[‘datetime’]))
-
獲取這種自己想要的內容不在標籤裡面的情況 etree.HTML(str(get_news[n].find(‘div’,{‘class’:‘特定屬性’}))).xpath(’//div[@class=“特定屬性”]/text()’)[0]