2016-09-18 78 views
2

我有很多表,每個表都有數據標籤是這樣的:的Python - BeautifulSoup:找到TD寬度

<td width="563" valign="top" bgcolor="#FFFF99" class="text"> 
... 
<td width="12" bgcolor="#FFFF99" class="lettnav"> 
<td bgcolor="#FFFF99" class="lettnav"> 

的目標是,以定位<td>最高值。要做到這一點,首先我想使用beautifulsoap獲取寬度的值(如果沒有,只打印空字符串)。

這裏是我的代碼片斷,到目前爲止,沒有工作:

soup = BeautifulSoup(page, 'html.parser') 
cells = soup.findAll("td",{"width": re.compile('\d')}) 

for aCell in cells: 
    width=aCell.find("width") 
    print(width) 

任何幫助嗎?

+0

什麼沒有工作?你是否得到一個空的單元格列表,或者你無法提取for循環中的寬度? –

+0

它不給我寬度 – Hajar

回答

0

在BeautifulSoup屬性中以字母表示法訪問(有關更多信息,請參閱https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes)。

使用width=aCell["width"]您的代碼工作:

for aCell in cells: 
    width=aCell["width"] 
    print(width) 

如果你只是感興趣的最大值,你也可以省略for迴路,並使用列表理解來代替:

maxwidth = max(int(x["width"]) for x in cells) 
+0

謝謝。此代碼打印寬度。 – Hajar

1

要找到td可以使用的最大寬度max的列表td的返回f ROM的find_all電話,設置關鍵key=lambda t: int(t["width"])

soup = BeautifulSoup(page, 'html.parser') 
cells = soup.find_all("td", width=True) 

mx_td = max(cells, key=lambda t: int(t["width"])) 

t["width"]訪問屬性值,我們需要呼籲的結果INT或值將比較lexicographically2 > 100將是真實的。

+0

謝謝。有用! – Hajar