如何从网页中抓取表格?

数据挖掘 Python 熊猫
2021-10-09 06:52:25

我需要从网页上刮下一张表格并将其放入熊猫数据框中。但我无法做到。让我先给你一个提示,表是如何编码成 html 文档的。

<tbody>
<tr>
<th colspan="2">United States Total<strong>**</strong></th>
<td><strong>15,069.0</strong></td>
<td><strong>14,575.0</strong></td>
<td><strong>100.0</strong></td>
<td></td>
<td></td>
</tr>
<tr>
<th colspan="7">Arizona</th>
</tr>
<tr>
<td>Pinal Energy, LLC</td>
<td>Maricopa, AZ</td>
<td>50.0</td>
<td>50.0</td>
<td>NA</td>
<td>2012-07-01</td>
<td>2014-03</td>
</tr>
<tr>
<td colspan="2"><strong>Arizona Total</strong></td>
<td>50.0</td>
<td>50.0</td>
<td>NA</td>
<td></td>
<td></td>
</tr>
<tr>

表格的主体以<tbody>....</tbody>. 每个<tr>....</tr>都是表格的一行。在每一行内,即在每对 内<tr>....</tr>,每一列由 给出<td>50.0</td>

以下是我的问题:

1)我如何刮它?我正在使用BeautifulSoupandrequests为此目的以及pandas模块。我尝试了以下方法:

r = requests.get(url)
bs = BeautifulSoup(r.text)
info = bs.findALL('tr','td')
  ....
  ....

但它给了我这个错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-24-32d9483e2c59> in <module>()
      1 bs = BeautifulSoup(r.text)
----> 2 info = bs.findALL('tr','td')
      3 #print bs

TypeError: 'NoneType' object is not callable

2)我需要根据其中的文本跳过一些行。例如,我不想阅读出现“总计”一词的行(如 中<th colspan="2">United States Total<strong>**</strong></th>)。我怎么做 ?虽然,它不是非常重要,因为我可以稍后摆脱它,但是在读取数据时跳过这些行是我理想的需要。

我知道这是一个很长的帖子,但如果有人可以帮助我,我将不胜感激。如果需要更多信息,请告诉我。

非常感谢。

1个回答

这将为您提供以下所有值<tr>

bs=BeautifulSoup(data, "lxml")
table_body=bs.find('tbody')
rows = table_body.find_all('tr')
for row in rows:
    cols=row.find_all('td')
    cols=[x.text.strip() for x in cols]
    print cols