2011-04-20 36 views
1

我正在創建一個Web爬蟲程序,並使用HTMLParser模塊來解析HTML文檔中的鏈接。如果解析器遇到錯誤標記,則會引發解析錯誤並終止應用程序。由於爬蟲遍歷整個網頁,所以這個錯誤經常被提出。如何在解析錯誤後繼續解析HTMLParser?

在python.org bug部分,有人已經提出了這個問題。你可以看看那here。問題是我不知道如何使用提供的「補丁」,但我不明白這些評論。

我想覆蓋HTMLParser模塊的默認行爲,以允許它在解析錯誤後繼續解析。

回答

1

您應該使用BeautifulSoup而不是HTMLParser。 BeautifulSoup更健壯。

美麗的湯不會嗆,如果你給它壞標記。它產生一個解析樹,與您的原始文檔大致相同。這通常足夠收集你需要的數據並逃跑。

0

我自己不使用HTMLParser,但是你能不能把你的語句放在try/except塊中?

try: 
    myval = HTMLParser.flimsyFunction() 
except HTMLParser.ParseError: 
    myval = None 
+0

但問題是,它不會繼續解析相同的HTML文檔。它將進入下一頁。我希望它儘可能多地解析文檔。 – blazar 2011-04-20 16:01:08

0

有一些博客和網頁不希望自己的網頁進行掃描,並通過機器人和解析器解析方案誰也。他們希望許多解析器給出錯誤情況。

很多時候,它寫在網頁的代碼

document.write('<sci'+<pt'...) 

以這種方式通過JavaScript的用戶嘗試插入代碼,但在這整個飼料被設置爲解析解析器給出了一個錯誤說法一個「壞標籤遇到」並停止。

解決這個問題的最好辦法是分析只是刪除所有的JavaScript代碼的情況下,你只需要內容之前,你會工作得很好:)

+0

這只是糟糕的書面頁面,沒有說明可以對任何瀏覽器做什麼,更不用說糟糕的屏幕閱讀器和其他可訪問的瀏覽器。 – Skuld 2012-01-11 10:51:01