0

我正在处理的 HTML 结构是:

<tr showhide="show" style="display: table-row; ">
            <td class="monthlyCost">£18<span>.50</span></td>
                      <td class="phoneCost">£299.99</td>
                      <td><span class="lowLight">24 Months</span></td>
            <td>200</td>
            <td>Unlimited</td>
            <td class="dataAllowance">100MB</td>
            <td class="extras">

我正在使用以下 Python 代码来提取信息:

minutes       = tariff_link_soup.findAll('td', {"class": False})
texts         = tariff_link_soup.findAll('td', {"class": False})

问题:我想要这两个td( <td>200</td>& <td>Unlimited</td>) 标记中提到的 2 个不同列分钟和文本中的信息。但是我将 class 定义为 false 的方法会不断地找到 324 Months200arguments Unlimited

我理解这个问题,但无法为其设计解决方案。它有两个部分,首先我不希望lowlight类中的数据,其次我希望接下来两个td标签中的数据位于 2 个不同的列中,即使我可以将它们放在一起,我也可以将它们分成 2 列200 Unlimited

请帮我解决这个问题。

4

1 回答 1

0

如果您使用的是 BeautifulSoup 3,正确的调用是:

.findAll('td', {'class': None})

这给了我:

>>> results = s.findAll('td', {'class': None})
>>> results
[<td><span class="lowLight">24 Months</span></td>, <td>200</td>, <td>Unlimited</td>]

当您调用它两次时,您将在minutes和中获得相同的数据texts。我假设你的表的列不会改变,所以你必须使用索引:

>>> minutes = results[1]
>>> texts = results[2]
>>> minutes, texts
(<td>200</td>, <td>Unlimited</td>)
于 2013-02-06T13:59:26.290 回答