1. 程式人生 > >對爬取的網路資訊進行資訊篩選與資訊提取

對爬取的網路資訊進行資訊篩選與資訊提取

準備好模組

由於資訊多種多樣,這裡以資訊新聞資訊為例,以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]