一般的網頁內容抽取需要針對特定的**進行特定的檢查定位正文標籤,指定抽取規則。但是如果需要抽取100個不同內容結構的**正文,需要的就是100個不同的規則。本文實現的是針對於一般的長文字正文類**(部落格、新聞、**類)實現的通用正文內容抽取。像那種需要抽取的正文內容c長度與網頁內容w長度比例c/w<0.5的可能會出現不適用的情況。(比如正文是一句話幾個字,整個頁面內容的文字長度超過了正文的2倍,那最好使用dom標籤規則抽取)有沒有一種通用的內容抽取呢。可以只基於網頁正文內容的變化而變化的規則f(x).
以下的「網頁」均指長文字型別的網頁一般的網頁正文都是屬於段落型別的文字,所屬標籤不一,其他的無用資訊(如網頁版權、站點通知、導航內容等)也佔據了一定的頁面內容,如果單純的把網頁內容文字全部抽取出來,
這很簡單,但是會夾雜很多的無用內容,干擾太大,所以針對正文抽取得到頁面的真正有用資訊是主要目的。可以利用正文內容進行網頁相似度的計算。
下圖是csdn的兩則博文正文行號-行字數關係圖表:
《中文編碼相關,python處理gbk編碼的xml檔案方法》:下圖是segmentfault的一篇博文正文行號-行字數關係圖表:《python抓取gb2312gbk編碼網頁亂碼問題》:
《解決 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頁面和其他一些亂其八糟可能看不懂的變數,還有就是正常互...