我有一个像这样的HTML文本
<tr>
<td><strong>Turnover</strong></td>
<td width="20%" class="currency">£348,191</td>
<td width="20%" class="currency">£856,723</td>
<td width="20%" class="currency">£482,177</td>
</tr>
<tr>
<td> Cost of sales</td>
<td width="20%" class="currency">£275,708</td>
<td width="20%" class="currency">£671,345</td>
<td width="20%" class="currency">£357,587</td>
</tr>
<tr>
之前和之后有很多html。我想解析这些数字。可以有不同数量的td
列,因此我想解析所有这些列。在这种情况下,有三列,所以我要找的结果是:
[348191, 856723, 482177]
理想情况下,我想将Turnover
和Cost of Sales
数据分别解析为不同的变量
答案 0 :(得分:5)
您可以使用BeautifulSoup
:
>>> from bs4 import BeautifulSoup as BS
>>> html = """ <tr>
... <td><strong>Turnover</strong></td>
... <td width="20%" class="currency">£348,191</td>
... <td width="20%" class="currency">£856,723</td>
... <td width="20%" class="currency">£482,177</td>
... </tr>
... <tr>
... <td> Cost of sales</td>
... <td width="20%" class="currency">£275,708</td>
... <td width="20%" class="currency">£671,345</td>
... <td width="20%" class="currency">£357,587</td>
... </tr>"""
>>> soup = BS(html)
>>> for i in soup.find_all('tr'):
... if i.find('td').text == "Turnover":
... for x in i.find_all('td', {'class':'currency'}):
... print x.text
...
£348,191
£856,723
£482,177
首先,我们将HTML转换为bs4
类型,我们可以轻松浏览。 find_all
,没有用于猜测其功能的奖品,找到所有<tr>s
。
我们遍历每个tr,如果第一个<td>
是营业额,那么我们将完成<td>s
的其余部分。
我们使用td
遍历每个class="currency"
并打印其内容。