匹配多行中的数字

时间:2013-06-17 12:21:55

标签: python regex parsing html-parsing

我有一个像这样的HTML文本

  <tr>
    <td><strong>Turnover</strong></td>
          <td width="20%" class="currency">&pound;348,191</td>
              <td width="20%" class="currency">&pound;856,723</td>
              <td width="20%" class="currency">&pound;482,177</td>
          </tr>
  <tr>
    <td>&nbsp;&nbsp;Cost of sales</td>
          <td width="20%" class="currency">&pound;275,708</td>
              <td width="20%" class="currency">&pound;671,345</td>
              <td width="20%" class="currency">&pound;357,587</td>
          </tr>
  <tr>

之前和之后有很多html。我想解析这些数字。可以有不同数量的td列,因此我想解析所有这些列。在这种情况下,有三列,所以我要找的结果是:

[348191, 856723, 482177]

理想情况下,我想将TurnoverCost of Sales数据分别解析为不同的变量

1 个答案:

答案 0 :(得分:5)

您可以使用BeautifulSoup

>>> from bs4 import BeautifulSoup as BS
>>> html = """  <tr>
...     <td><strong>Turnover</strong></td>
...           <td width="20%" class="currency">&pound;348,191</td>
...               <td width="20%" class="currency">&pound;856,723</td>
...               <td width="20%" class="currency">&pound;482,177</td>
...           </tr>
...   <tr>
...     <td>&nbsp;&nbsp;Cost of sales</td>
...           <td width="20%" class="currency">&pound;275,708</td>
...               <td width="20%" class="currency">&pound;671,345</td>
...               <td width="20%" class="currency">&pound;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"并打印其内容。