尝试从HTML表格中的tr元素获取所有详细信息

时间:2019-01-03 21:27:19

标签: python python-3.x dataframe beautifulsoup

下面的代码很好地完成了从网页中所有tr元素获取所有详细信息的工作。

for link in page_source:
    wd.get(link)
    #print(link)
    html_page = wd.page_source 
    soup = bs(html_page, 'html.parser')

    table_body=soup.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]
        masterlist.append(cols)

这里唯一的问题是它将我真正想要分离的某些元素混合在一起。这是一个很好的例子。当我运行上面的代码时,会得到如下结果:

col5   col7
247    1013

这里是示例代码,显示了2、4​​和7的组织方式。

<g transform="translate(16.5,18.5)"><text fill="black" text-anchor="middle" vertical-align="middle" font-size="8" y="3">2</text><circle stroke-width="2" stroke="green" fill-opacity="0" r="12.5" title="" style="cursor: pointer; opacity: 1; stroke-width: 2;" data-original-title="success"></circle></g>
<g transform="translate(45.5,18.5)"><text fill="black" text-anchor="middle" vertical-align="middle" font-size="8" y="3"></text><circle stroke-width="1" stroke="gainsboro" fill-opacity="0" r="12.5" title="" style="opacity: 1;" data-original-title="running"></circle></g>
<g transform="translate(74.5,18.5)"><text fill="black" text-anchor="middle" vertical-align="middle" font-size="8" y="3">4</text><circle stroke-width="2" stroke="red" fill-opacity="0" r="12.5" title="" style="cursor: pointer; opacity: 1; stroke-width: 2;" data-original-title="failed"></circle></g>
<g transform="translate(103.5,18.5)"><text fill="black" text-anchor="middle" vertical-align="middle" font-size="8" y="3">7</text><circle stroke-width="2" stroke="orange" fill-opacity="0" r="12.5" title="" style="cursor: pointer; opacity: 1; stroke-width: 2;" data-original-title="upstream_failed"></circle></g>
<g transform="translate(132.5,18.5)"><text fill="black" text-anchor="middle" vertical-align="middle" font-size="8" y="3"></text><circle stroke-width="1" stroke="gainsboro" fill-opacity="0" r="12.5" title="" style="opacity: 1;" data-original-title="up_for_retry"></circle></g>
<g transform="translate(161.5,18.5)"><text fill="black" text-anchor="middle" vertical-align="middle" font-size="8" y="3"></text><circle stroke-width="1" stroke="gainsboro" fill-opacity="0" r="12.5" title="" style="opacity: 1;" data-original-title="queued"></circle></g>

所有内容都在<g transform>标记内,并且如果存在数字,它们总是在</text>之前。有时这里没有数字。因此,2、4和7都是独立且不同的变量,但是它们正在合并在一起。同样,10,1和3都是分开且不同的。如果我可以将这些数字用逗号分隔或管道分隔,则可以轻松地将所有内容放入数据框以使其井井有条。

我想以这样的结尾:

2|4|7      10|1|3

0 个答案:

没有答案