美丽的汤: 如何从不一致的HTML标签中提取数据

2024-04-25 00:24:02 发布

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

我想从两种形式的标签中提取数据:

<td><div><font> Something else</font></div></td>

以及

<td><div><font> Something <br/>else</font></div></td>

我使用.string()方法,在第一种情况下,它给我所需的字符串(Something else),但在第二种情况下,它给我None。你知道吗

有没有更好的方法或替代方法?你知道吗


Tags: 数据方法字符串brdivnonestring情况
2条回答

尝试使用.text属性而不是.string

from bs4 import BeautifulSoup

html1 = '<td><div><font> Something else</font></div></td>'
html2 = '<td><div><font> Something <br/>else</font></div></td>'

if __name__ == '__main__':
    soup1 = BeautifulSoup(html1, 'html.parser')
    div1 = soup1.select_one('div')
    print(div1.text.strip())

    soup2 = BeautifulSoup(html2, 'html.parser')
    div2 = soup2.select_one('div')
    print(div2.text.strip())

输出:

Something else
Something else

你可以用正则表达式来处理这些事情!你知道吗

import re
result = re.search('font>(.*?)</font',  str(scrapped_html))
print(result[1])

这对你的案子有帮助。为了避免捕获标记,您需要操纵字符串。你知道吗

通过print("<br/>" in result[1])检查,如果字符串包含
标记,那么它将返回True,在这种情况下,您需要删除标记。你知道吗

result = str(result[1]).split("<br/>")这会给你一个列表[' Something ', 'else'],加入他们得到你的答案。。result = (" ").join(result)

以下是完整的片段:

import re

result = re.search('font>(.*?)</font',  str(scrapped_html))

if "<br/>" in result[1]:
    result = str(result[1]).split("<br/>")
    result = (" ").join(result)
    print(result)
else:
    print(result[1])

我知道这是一个相当糟糕的解决方案,但它会为你工作!你知道吗

相关问题 更多 >