BeautifulSoup和Python删除HTML标签

我需要帮助从脚本结果中解析出HTML标签。我想将结果放在一个对象中以转换为json。当我打印对象时,除了我不能仅提取没有html标签的文本之外,其他所有东西都可以正常工作。我一直在该站点上搜索答案,并尝试了各种方法来删除标签,但是我不确定自己在做什么错。感谢您的帮助。

根据我在这里阅读的一些内容,我尝试打印teamObject.text,但这不起作用。

def make_soup(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content,'html.parser')
    return soup

soup = make_soup("team.html")
for record in soup.findAll('tr'):
    teamObject = {"name": record.find('a'),"description": record.find('p')}
    print (teamObject)

我希望在没有html标记的对象形式下看到结果。

每个评论的更新:

我目前看到的只是打印上面的代码的结果是:

{'name': <a href="/team/001"> Team 1 </a>,'description': <p><a href="/team/001">Team 1</a> is a team does cool things.</p>}

更新代码以包含.text:

def make_soup(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content,'html.parser')
    return soup


soup = make_soup("team.html")
for record in soup.findAll('tr'):
    teamObject = {
        "name": record.find('a').text,"description": record.find('p').text
        }
    print (teamObject)

我得到这个结果:

"name": record.find('a').text,AttributeError: 'NoneType' object has no attribute 'text'

我希望只看到没有html标签的文本。

djxzh0 回答:BeautifulSoup和Python删除HTML标签

尝试对循环中每个记录的查找结果使用.text

for record in soup.findAll('tr'):
    teamObject = {
        "name": record.find('a').text,"description": record.find('p').text
        }

.text调用.get_text(),所以这与上面的注释类似,但是我想您想在上一次搜索中获得文本结果。

如果需要传递用于格式化的参数,则可以使用get_text()。 See the docs

编辑:

接收到NoneType错误,告诉我您有一些<tr>标签,其中没有包含<a><p>标签。如果record.find在循环中找不到结果,则它将返回None,这将无法返回文本值。

您可以通过逻辑解决此问题,也可以重新评估您的搜索方式。骇人听闻的方法是在返回文本之前检查您是否具有所需的标签。

for record in soup.findAll('tr'):
    if record.a and record.p:
        teamObject = {
            "name": record.find('a').text,"description": record.find('p').text
            }

这可以确保您不会收到“无”错误,但是现在您将完全跳过任何缺少<a><p>标签的行,请当心。

如果您确信相关行将始终具有<a><p>标签,则可以通过仅返回其中带有“ Team”的行来排除所有不良的{{1} }条目。

<tr>
本文链接:https://www.f2er.com/3116322.html

大家都在问