首页 > 解决方案 > 如何使用 BeautifulSoup 获取带有 rowspan 标签的行

问题描述

我正在尝试使用 BeautifulSoup 从 html 表中创建一个 pandas 数据框,并且我正确地获取了所有行,但其中包含 rowspan 标记的行除外,即 1 此行已从我的数据框中排除。我试图用其他东西替换rowspan 标记,即类,但结果仍然相同。我正在使用 html5lib 解析器,因为 xml 和 lxml 不起作用。有人可以帮我获取所有行,包括带有 rowspan 标签的行吗?

标签: pythonhtmldataframeweb-scrapingbeautifulsoup

解决方案


给你一个使用simplified_doc的例子

from simplified_scrapy.simplified_doc import SimplifiedDoc 
html = '''<table><tr rowspan="1"><td>11</td><td>12</td></tr>
<tr><td>21</td><td>22</td></tr></table>'''
doc = SimplifiedDoc(html)
rows = doc.getElementByTag('table').trs
print ('-'*10,'all')
print (rows)
print ('-'*10,'contains rowspan')
print (rows.contains('','rowspan'))
print ('-'*10,'not contains rowspan')
print (rows.notContains('','rowspan'))
print ('-'*10,'td')
for row in rows:
  tds = [td.text for td in row.tds]
  print(tds)

结果:

---------- all
[{'rowspan': '1', 'tag': 'tr', 'html': '<td>11</td><td>12</td>'}, {'tag': 'tr', 'html': '<td>21</td><td>22</td>'}]
---------- contains rowspan
[{'rowspan': '1', 'tag': 'tr', 'html': '<td>11</td><td>12</td>'}]
---------- not contains rowspan
[{'tag': 'tr', 'html': '<td>21</td><td>22</td>'}]
---------- td
['11', '12']
['21', '22']

推荐阅读