【问题标题】:Removing `<br>` and `&nbsp;` from HTML table with Python and Beautiful Soup使用 Python 和 Beautiful Soup 从 HTML 表中删除 `<br>` 和 ` `
【发布时间】:2018-12-13 18:17:49
【问题描述】:

我想使用 Python 和 bs4 从抓取的 HTML 表中删除 &lt;br&gt;&amp;nbsp;

HTML 表格:

    <tr>
    <td style="width: 15; BORDER-BOTTOM: 1px solid">col1</td>
    <td colspan="2" style="width: 120; BORDER-BOTTOM: 1px solid">&nbsp;col2</td>
    <td style="width: 50; BORDER-BOTTOM: 1px solid">col3</td>
    <td style="width: 50; BORDER-BOTTOM: 1px solid">col5</td>
    <td style="width: 50; BORDER-BOTTOM: 1px solid">col6</td>
    <td style="width: 90; BORDER-BOTTOM: 1px solid" align="center">col7</td>
    <td style="width: 90; BORDER-BOTTOM: 1px solid" align="center">col8</td>
    <td style="width: 10; BORDER-BOTTOM: 1px solid">col9</td>
    <td style="width: 10; BORDER-BOTTOM: 1px solid">col
        <br>&nbsp;1
        <br>0</td>
    <td style="width: 10; BORDER-BOTTOM: 1px solid">col11</td>
    <td style="width: 10; BORDER-BOTTOM: 1px solid" >col12</td>
    <td style="width: 10; BORDER-BOTTOM: 1px solid">col13</td>
    <td style="width: 10; BORDER-BOTTOM: 1px solid">col14</td>
    <td style="width:10;BORDER-BOTTOM: 1px solid;" >col15</td>
</tr>
<tr bordercolor="#000000" class="rows1">
    <td align="left">&nbsp;1</td>
    <td colspan="2" style="BORDER-LEFT: 1px solid" align="left">&nbsp;123456789</td>
    <td style="BORDER-LEFT: 1px solid" align="left">&nbsp;John </td>
    <td style="BORDER-LEFT: 1px solid" align="left">&nbsp;Doe </td>
    <td style="BORDER-LEFT: 1px solid" align="left">&nbsp; </td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;3.000</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;0,00</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;30</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;0</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid;BORDER-RIGHT: 1px solid;" align="right">&nbsp;5000</td>
</tr>
<tr bordercolor="#000000" class="rows0">
    <td align="left">&nbsp;2</td>
    <td colspan="2" style="BORDER-LEFT: 1px solid" align="left">&nbsp;123456789</td>
    <td style="BORDER-LEFT: 1px solid" align="left">&nbsp;Jane </td>
    <td style="BORDER-LEFT: 1px solid" align="left">&nbsp;Doe </td>
    <td style="BORDER-LEFT: 1px solid" align="left">&nbsp; </td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;3.000</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;0,00</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;30</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;0</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;3</td>
    <td style="BORDER-LEFT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid; BORDER-RIGHT: 1px solid" align="right">&nbsp;</td>
    <td style="BORDER-LEFT: 1px solid;BORDER-RIGHT: 1px solid;" align="right">&nbsp;5000</td>
</tr>

Python 代码:

import requests
import bs4

url = "http://www.example.com/test.html"
r = requests.get(url)

html = r.text
soup = bs4.BeautifulSoup(html, 'html.parser')
tables = soup.findAll('table')[1]

for tr in tables.findAll('tr')[0:3]:
    cols = tr.findAll('td')
    for tds in cols:
        print ('{:5}'.format(str(tds.text)), end="")
    print()

【问题讨论】:

  • 你想用什么替换它们?一旦你知道了,这就是简单的文本操作。
  • 我只是想删除它们,不需要替换。

标签: python web-scraping html-table beautifulsoup


【解决方案1】:

您可以使用replace 函数。

TEXT = '<br>test&nbsp;&nbsp;test'
TEXT = TEXT.replace('<br>', '').replace('&nbsp;', '')

【讨论】:

  • 从 html 代码中删除
    后,换行符仍然保留在 col10 中。
猜你喜欢
  • 2011-08-20
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多