在python中使用Beautiful soup分析表

2024-06-17 15:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有张桌子:

<table border="1" style="width: 100%">
  <caption></caption>
  <col>
  <col>
  <tbody>
<tr>
  <td>Pig</td>
  <td>House Type</td>
</tr>
<tr>
  <td>Pig A</td>
  <td>Straw</td>
</tr>
<tr>
  <td>Pig B</td>
  <td>Stick</td>
</tr>
<tr>
  <td>Pig C</td>
  <td>Brick</td>
</tr>

在 在

我只是想返回表对的JSON字符串,如下所示:

^{pr2}$

但是,在我的代码中,我似乎无法摆脱HTML标记:

stable = soup.find('table')

cells = [ ]
rows = stable.findAll('tr')
for tr in rows[1:4]:
    # Process the body of the table
    row = []
    td = tr.findAll('td')
    #td = [el.text for el in soup.tr.finall('td')]
    row.append( td[0])
    row.append( td[1])
    cells.append( row )


return cells

最终,我想这样做: #h=json.dumps文件(单元格) #返回h

我的输出是:

[[<td>Pig A</td>, <td>Straw</td>], [<td>Pig B</td>, <td>Stick</td>], [<td>Pig C</td>, <td>Brick</td>]]


Tags: tablecoltrrowstdrowstablesoup
2条回答

使用text属性仅获取元素的内部文本:

row.append(td[0].text)
row.append(td[1].text)

您可以尝试使用lxml库。在

from lxml.html import fromstring
import lxml.html as PARSER

#data = open('example.html').read() # You can read it from a html file.
#OR
data = """
<table border="1" style="width: 100%">
  <caption></caption>
  <col>
  <col>
  <tbody>
<tr>
  <td>Pig</td>
  <td>House Type</td>
</tr>
<tr>
  <td>Pig A</td>
  <td>Straw</td>
</tr>
<tr>
  <td>Pig B</td>
  <td>Stick</td>
</tr>
<tr>
  <td>Pig C</td>
  <td>Brick</td>
</tr>
"""
root = PARSER.fromstring(data)
main_list = []

for ele in root.getiterator():
    if ele.tag == "tr":
        text = ele.text_content().strip().split('\n')
        main_list.append(text)

print main_list

输出: [[“猪”,“房子类型”],[“猪A”,“稻草”],[“猪B”,“棍子”],[“猪C”,“砖”]]

相关问题 更多 >