通過HTMLExtractor向HTML要資料

2021-08-22 08:32:57 字數 1757 閱讀 7178

西安市國土資源資訊中心 李博

如何不斷擴充資料中心的資料規模,提公升資料探勘的價值,這是我們思考的問題,資料一方面來自於內部生產,一部分資料可以來自於網際網路,網際網路上的資料體量龐大,形態多樣,之前blog裡很多fmeer已經提出了方案,比如json,xml,正規表示式等等,但對於比較鬆散的html如何進行資料解析提取呢?我問了一下度娘,貌似沒有fme下的文章,恰逢今天有時間,就寫一點關於html提取的東東,算是自己做的筆記吧!

這次我要提取的範例資料來自國土資源局土地招拍掛系統,我要提取上面的交易結果以及地塊資訊,樣式如下圖:

圖1:交易結果列表

圖2:地塊資訊

圖3:轉換工程

圖4:提取後的資料

在這個轉換工程裡,用到了幾個轉換器,它們是:pythoncreator,httpcaller,htmlextractor、pythoncaller、stringsearcher、stringreplacer、attributeexposer、attributerenamer、attributeremover

圖5:htmlextractor引數

圖上標註的引數依次是:

1、       html input:html的內容**,可以是content,表示**於傳入的屬性、引數等,也可以是file,表示**於乙個已存在的html檔案。

2、       html content:本案例用的是content作為源,與httpcaller連用,html存放於_response_body屬性中。如果是file作為源,則需要設定html file為檔案路徑。

3、     target attribute:設定乙個屬性(列表)名稱,這個屬性名稱將包含html解析的結果。

4、       css selector:設定css選擇器,類似正規表示式,但用起來更簡單,特別適合解析html。

5、       tag part/html attribute:可以設定為value(匹配標籤裡的值)、whole(匹配的標籤和值)、或者輸入匹配標籤擁有的乙個屬性名稱,比如標記的href屬性。

6、       return format:可以設定為list attribute,則將所有匹配的內容作為乙個list返回,如果為first match,則僅返回第乙個匹配的內容。

舉個栗子,下面是我要匹配的交易結果html原始檔:

bq2-19-87

國有建設用地使用權

15851.0萬元

15851.0萬元

西安奧達房地產開發有限責任公司

2017-04-27 16:00

已成交

我要把紅色的內容提取出來,我只需要簡單的寫一句css選擇器進行匹配即可,但在寫之前一般是要先整理分析一下html原始檔,找出可以用於匹配的特徵,提高匹配的準確度,減少其他雜誌資料被提取出來。

因為html原始檔中有大量的,所以直接匹配td是不行的,經過分析我找到了特徵,css選擇器為:tr[onmouseover] td。意思是擁有onmouseover屬性的tr標記下的td標記。

就這麼簡單,獲取的資料還有少量雜質,再用其他的轉換器清洗一下即可。

可能會有人問了,你自己抓自己單位的資料好無聊,哈哈,我只是測試一下,如果是你抓我們單位的資料,就不無聊了,我去抓你們單位的資料或網際網路上其他有用的頁面,是不是頓時就開啟了腦洞?

另外,最近正規表示式呼聲很高,必須承認,正規表示式非常強大,但有些工作還是有更簡單的辦法,殺雞焉用牛刀,對於html,通過編寫css選擇器應用htmlextractor轉換器來解析資料,更加敏捷高效!

工作之餘一點心得,不成體系,不周之處,歡迎各位批評斧正!

通過ActiveProcessLinks遍歷程序

程序的遍歷有多種方法。在應用程式裡可以使用createtoolhelp32snapshot函式先做個程序快照 snapshot 然後通過返回的資料進行遍歷。在核心程式設計裡可以通過核心資料結構來實現。核心結構eprocess 執行體程序塊 executive process 是乙個不透明 opaqu...

通過RestHighLevelClient操作ES

一 查詢相關 在es查詢中,must相當於sql語句中的and,should相當於or。當想要實現類似於 select from table where a and b or c or d 的功能時可以借助於es中的bool。即resthighlevelclient中的boolquerybuilde...

IEEE PDF eXpress 通過方法

ieee pdf express這個東西比較煩人 文章是用latex寫的,生成pdf後始終是不能通過 原因是有些文字無法嵌入到pdf中的,本人之前的解決方法是把所有檔案打包生成zip後上傳,讓ieee來生成pdf 但這次一直不行,不過最後找到了乙個非常簡單的方法 安裝pdfcreater,之後列印生...