無關標籤的一般長文字網頁正文內容抽取

2021-09-13 00:10:19 字數 2494 閱讀 8154

一般的網頁內容抽取需要針對特定的**進行特定的檢查定位正文標籤,指定抽取規則。但是如果需要抽取100個不同內容結構的**正文,需要的就是100個不同的規則。

有沒有一種通用的內容抽取呢。可以只基於網頁正文內容的變化而變化的規則f(x).

本文實現的是針對於一般的長文字正文類**(部落格、新聞、**類)實現的通用正文內容抽取。像那種需要抽取的正文內容c長度與網頁內容w長度比例c/w<0.5的可能會出現不適用的情況。(比如正文是一句話幾個字,整個頁面內容的文字長度超過了正文的2倍,那最好使用dom標籤規則抽取)

以下的「網頁」均指長文字型別的網頁
一般的網頁正文都是屬於段落型別的文字,所屬標籤不一,其他的無用資訊(如網頁版權、站點通知、導航內容等)也佔據了一定的頁面內容,如果單純的把網頁內容文字全部抽取出來,

這很簡單,但是會夾雜很多的無用內容,干擾太大,所以針對正文抽取得到頁面的真正有用資訊是主要目的。可以利用正文內容進行網頁相似度的計算。

下圖是csdn的兩則博文正文行號-行字數關係圖表:

《中文編碼相關,python處理gbk編碼的xml檔案方法》:

《python抓取gb2312gbk編碼網頁亂碼問題》:

下圖是segmentfault的一篇博文正文行號-行字數關係圖表:

《解決 scripterror的另類思路》:

可以看到,正文的內容一般是連續行的塊,因此我們可以設定閾值來過濾一些非正文的干擾行,但是針對某些連續行並不是有效正文的情況,就需要看這個連續行組成的塊的總字元數。

如果字數少於乙個閾值,就不屬於正文,也就是正文的字元密度,由此可見,正文可以基於連續行字元密度來進行提取。

假設我們已經爬取了網頁內容webcontent,並且將w的所有標籤去除得到了純文字保留行格式的文字內容linescontent.接下來:

#三個可控變數,自由調整使抽取達到理想效果

#連續行閾值:連續多少行則認為是乙個正文內容塊

threshold = 5

#正文內空行閾值:允許正文內容 段落或正文行 之間有多少空行

gap = 3

#正文本元密度閾值:每一行的字元數達到多少則認為屬於正文內容

density = 45

#********初始化設定#********

#保留抽取結果字典,格式:

results={}

#已經達到前後連續的次數

comobo_num =0

#當前連續塊的總字元數

combo_len = 0

#當前連續空行數

combo_null=0

#當前連續塊的文字內容

combo_text = ''

#當前行/前一行的字元數

pre_len = 0

for i in linescontent:

#當前行非空

if i.strip():

pre_len = len(i)

comobo_num += 1

combo_null = 0

combo_len += pre_len

#疊加非空行內容到連續內容中

combo_text = combo_text+i+ os.linesep

#針對單行文字情況

if len(a)==1 and pre_len >= density*threshold:

results[pre_len]=combo_text

else:

combo_null +=1

#如果前一行非空

if pre_len:

#連續空行閾值判斷

if combo_null > gap:

#連續塊判斷

if combo_len >= density*threshold \

and comobo_num >= threshold:

results[combo_len]=combo_text

else:

continue

#非正文連續塊則全部引數復位

comobo_num = 0

combo_len = 0 if combo_null > gap else combo_len

pre_len = 0

combo_text = '' if combo_null > gap else combo_text

經過對多個長文字型別**的抓取抽取,正文抽取成功率達到了90%以上。

Tchar h 中的一般文字對映

visual studio 2013 其他版本 此主題尚未評級 評價此主題 為簡化 的傳輸,便於在國際上使用,microsoft 執行庫為許多資料型別 例程和其他物件提供 microsoft 特有的一般文字對映。您可以使用 tchar.h 中定義的這些對映,根據使用 define 語句定義的清單常數...

解決網頁瀏覽故障的一般思路

無法瀏覽網頁是上網最常見的故障之一,其具體原因比較複雜,解決的方法也不盡相同。結合工作經驗,我想就解決這個問題的思路談點個人看法 我的習慣思路是 先軟再硬後系統,先簡單後複雜,折半查詢縮小故障範圍。具體有以下幾個主要步驟 第一步 排除偶然的 不可預見性故障 不管三七二十一,先冷啟動電腦及數據機,排除...

從網頁抓取資料的一般方法

首先要了解對方網頁的執行機制,這可以用httpwacth或者httplook來看一下http傳送和接收的資料。這兩個工具應該說是比較簡單易懂的。這裡就不再介紹了。主要關注的內容是header和post的內容。一般會包括cookie,referer頁面和其他一些亂其八糟可能看不懂的變數,還有就是正常互...