簡體   English   中英

使用PHP在任意HTML中查找重要文本?

[英]Find important text in arbitrary HTML using PHP?

我有一些隨機的HTML布局,其中包含我想要提取的重要文本。 我不能只是strip_tags()因為它會從側邊欄/頁腳/標題/等中留下一堆額外的垃圾。

我發現了一個用Python構建方法 ,我想知道在PHP中是否有這樣的東西。

這個概念相當簡單:如果一行文本值得輸出,請使用有關文本密度與HTML代碼的信息。 (這不是一個新穎的想法,但它有效!)基本過程的工作原理如下:

  1. 解析HTML代碼並跟蹤處理的字節數。
  2. 以每行或每段為基礎存儲文本輸出。
  3. 將每個文本行與描述它所需的HTML字節數相關聯。
  4. 通過計算文本t> o字節的比率來計算每行的文本密度。
  5. 然后通過使用神經網絡確定該行是否是內容的一部分。

只需檢查線路的密度是否高於固定閾值(或平均值),您就可以獲得相當不錯的結果,但如果您使用機器學習,系統會減少錯誤 - 更不用說它更容易實現了!

更新:我開始獲得一個可以從隨機HTML模板中提取主要內容的答案。 由於我無法共享我將使用的文檔 - 只需選擇任意隨機博客網站並嘗試從布局中提取正文。 請記住,標題,側邊欄和頁腳也可能包含文本。 請參閱上面的鏈接以獲取建議。

  • phpQuery是一個基於jQuery JavaScript庫的服務器端,可鏈接,CSS3選擇器驅動的文檔對象模型(DOM)API。

更新2

  1. 許多博客都使用CMS ;
  2. 博客html結構幾乎是時候了。
  3. 避免常見的選擇器,如#sidebar, #header, #footer, #comments, etc..
  4. 通過標記名稱script, iframe避免任何小部件
  5. 清楚知道的內容如:
    1. /\\d+\\scomment(?:[s])/im
    2. /(read the rest|read more).*/im
    3. /(?:.*(?:by|post|submitt?)(?:ed)?.*\\s(at|am|pm))/im
    4. /[^a-z0-9]+/im

搜索熟悉的類和ID:

  • typepad.com .entry .entry-content
  • wordpress.org .post-entry .entry .post
  • movabletype.com .post
  • blogger.com .post-body .entry-content
  • drupal.com .content
  • tumblr.com .post
  • squarespace.com .journal .journal-entry-text
  • expressionengine.com .entry
  • gawker.com .post-body

  • 參考: 前100名博客中選擇的博客平台


$selectors = array('.post-body','.post','.journal-entry-text','.entry-content','.content');
$doc = phpQuery::newDocumentFile('http://blog.com')->find($selectors)->children('p,div');

基於常見的html結構搜索,如下所示:

<div>
<h1|h2|h3|h4|a />
<p|div />
</div>

$doc = phpQuery::newDocumentFile('http://blog.com')->find('h1,h2,h3,h4')->parent()->children('p,div');

Domdocument可用於解析html文檔,然后可以通過PHP查詢。

編輯:wikied

我不久前在一個類似的項目上工作過。 它沒有Python腳本那么復雜,但它會做得很好。 查看Simple HTML PHP Parser

http://simplehtmldom.sourceforge.net/

根據您的HTML結構,如果您有id或類,您可能會有點復雜,並使用preg_match()專門獲取特定開始和結束標記之間的任何信息。 這意味着您應該知道如何編寫正則表達式。

您還可以查看瀏覽器仿真PHP類。 我已經為頁面抓取做了這個,它的工作原理很好,具體取決於DOM的格式。 我個人喜歡SimpleBrowser
http://www.simpletest.org/api/SimpleTest/WebTester/SimpleBrowser.html

我開發了一個HTML解析器和過濾PHP包,可用於此目的。

它由一組可以鏈接在一起的類組成,以便在HTML / XML代碼中執行一系列解析,過濾和轉換操作。

它旨在處理真實世界頁面,因此它可以處理格式錯誤的標記和數據結構,因此它可以盡可能多地保留原始文檔。

它附帶的一個過濾器類可以進行DTD驗證。 另一個可以丟棄不安全的HTML標簽和CSS來防止XSS攻擊。 另一個可以簡單地提取所有文檔鏈接

所有這些過濾器類都是可選的。 如果您需要,可以按照自己的方式將它們鏈接在一起。

因此,為了解決您的問題,我認為在任何地方都沒有針對PHP的特定解決方案,但可以為它開發一個特殊的過濾器類。 看看包裝。 它是完整的文件。

如果您需要幫助,只需檢查我的個人資料並給我發郵件,我甚至可以開發出能夠滿足您需求的過濾器,最終受到其他語言存在的任何解決方案的啟發。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM