2012-03-16 71 views
0

我知道問題標題並不是很了不起,但我想不出一個更好的方式來表達它。我有一點HTMl,我需要搜索:從HTML中解析特定信息的最簡單方法

<tr bgcolor="#e2d8d4"> 
<td>1</td> 
<td>12:00AM</td> 
<td>Show Name<a name="ID#"></a></td> 
<td>Winter 12</td> 
<td>Channel</td> 
<td>Production Company</td> 
<td nowrap>1d 11h 9m (air time)</td> 
<td align="center">11</td> 
<td> 
<a href="link">AniDB</a></td> 
<td><a href="link">Home</a></td> 
</tr> 

該頁面是幾十個這些html塊。我需要能夠用Show Name來選擇給定節目的播放時間,以及bgcolor。 (整頁在這裏:http://www.mahou.org/Showtime/Planner/)。我假設最好的賭注是一個正則表達式,但我對這個假設沒有信心。我寧願不使用第三方模塊(BeautifulSoup)。如果問題很模糊,我很抱歉。

+1

不要使用正則表達式來解析html。 BeautifulSoup實際上就是你需要的。 – EwyynTomato 2012-03-16 04:17:09

+1

至少使用[HTMLParser](http://docs.python.org/library/htmlparser.html),但我更喜歡'lxml'或'beautifulsoup'。 [使用正則表達式解析器HTLM是壞](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags) – Dikei 2012-03-16 04:17:42

回答

1

謝謝你做你的研究 - 這很好,你知道BeautifulSoup。這將真的是解決您的問題的最佳途徑。

這且不說...這裏是一個通用的策略,你可以選擇使用正則表達式(如果你的理智是值得商榷),或使用BeautifulSoup來實現(如果你是明智的。)

  • 它看起來像你想要的數據始終處於啓動關象表:

    <table summary="Showtime series for Sunday in a Planner format." border="0" bgcolor="#bfa89b" cellpadding="0" cellspacing="0" width="100%">

    您可以通過尋找summary="Showtime series for (Monday|Tuesday|....|Sunday)"屬性表,這是在頁面的獨特隔離此。

  • 您已經隔離了該表格,表格中的行格式已定義良好。我一次得到<tr>,並假定第二個<td>將始終包含播出時間,第三個<td>將始終包含該節目的名稱。

的正則表達式可以很好的從HTML提取很簡單的事情,比如「所有img標籤的src路徑」,但一旦你開始談論像「找到的每一第二<td>標籤嵌套的標籤與屬性summary="..."<tr>標籤,它變得更加困難的事情。這是因爲正則表達式設計沒有嵌套結構的工作。

canonical answer to 'regexps and HTML' questions,和what it takes to use regexps on arbitrary HTML湯姆·克里斯琴森的解釋。tchrist證明你可以使用正則表達式解析任何你想要的HTML - 如果你足夠確定 - 但像BeautifulSoup這樣的合適的解析庫更快,更容易,並且會給出更好的結果。

+0

非常感謝您的洞察力。我通常更喜歡儘可能使用默認庫,但似乎使用內置模塊vs第三方模塊進行此操作的成本太高,無法獲得任何可能的收益。也就是說,有可能以美麗的湯來解決這樣的困境嗎? (我以前從來沒有用過美麗的湯,但似乎無法弄清楚如何遍歷摘要中的元素) – Cirno 2012-03-16 04:53:55

+0

當我下班回家時。 ;) – 2012-03-16 05:28:13

1

這應該是一個評論,但結果太長了。

BeautifulSoup的文檔相當不錯,因爲它包含了相當多的examples,只是要知道有兩個版本,並不是每個版本都能很好地與每個版本的Python搭配使用,儘管可能在那裏你沒有問題看到這一點:"Beautiful Soup 4 works on both Python 2 (2.7+) and Python 3.「)

此外,像BeautifulSoup HTML解析器或LXML清潔處理之前你的HTML(以使其有效,這樣才能正確遍歷其樹),所以他們可能會移動視爲無效的某些元素。通常情況下,你可以禁用該功能,但不能確定你會得到你想要的結果。

還有其他方法可以解決您所要求的任務。然而,他們更多地參與實施,所以也許在你所描述的條件下這是不可取的。但是,爲了讓您知道,整個信息提取領域(IE)處理這類問題。 Here(PDF)是一個或多或少的關於它的調查,主要側重於IE提取HTML(半結構化,因爲他們稱之爲)網頁。

+0

那個鏈接是404. – 2012-03-16 05:27:58

+0

謝謝。現在它已經修復了。 – 2012-03-16 05:34:55