一個網頁有一個產品代碼,我需要以檢索,它是在下面的HTML部分:幫助使用美麗的湯檢索從HTML產品代碼
<table...>
<tr>
<td>
<font size="2">Product Code#</font>
<br>
<font size="1">2342343</font>
</td>
</tr>
</table>
所以我想這樣做,這將是最好的方式首先引用文本值爲「Product Code#」的html元素,然後引用TD中的第二個字體標籤。
想法?
一個網頁有一個產品代碼,我需要以檢索,它是在下面的HTML部分:幫助使用美麗的湯檢索從HTML產品代碼
<table...>
<tr>
<td>
<font size="2">Product Code#</font>
<br>
<font size="1">2342343</font>
</td>
</tr>
</table>
所以我想這樣做,這將是最好的方式首先引用文本值爲「Product Code#」的html元素,然後引用TD中的第二個字體標籤。
想法?
我的策略是:
<font>
元素並找到父節點的下一個兄弟節點<font>
元素代碼:
from BeautifulSoup import BeautifulSoup
html = open("products.html").read()
soup = BeautifulSoup(html)
product_codes = [tag.parent.findNextSiblings('font')[0].contents[0]
for tag in
soup.findAll(text='Product Code#')]
你可以使用這個表達式(或類似的東西):
<td>\n\ <font\ size="2">Product\ Code\#</font>\n\ <br>\n\ <font\ size="1">(?<ProductCode>.+?)</font>\n\ </td>
你也許可以刪除一些根據您的正則表達式引擎逃逸......我是持謹慎態度。
不要使用正則表達式來解析HTML。我會用下面的XPath完成這個任務:
//TABLE/TR/TD/FONT[@size='1']
或者,如果字體大小屬性不能保證在那裏,等於1:
//FONT[text()='Product Code#']/parent::*/FONT[2]
我很驚訝於有多少人無法讀取問題的「BeautifulSoup」的一部分。 – icktoofay 2010-08-15 04:59:10