gpt4 book ai didi

python - 为什么 BeautifulSoup 将

添加到我的结果中?

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:46 25 4
gpt4 key购买 nike

问题

我有以下 Page01.htm

<!DOCTYPE html><html lang="it-IT"><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=Edge">    <head><title>Title here</title></head>
<body>
<script id="TargetID" type="application/json"><![CDATA[
{ "name":"Kate", "age":22, "city":"Boston"}
]]>
</script><script id=“AnotherID” type="application/json"><![CDATA[{ "name":"John", "age":31, "city":"New York"}]]>
</script>
</body></html>

我想提取带有ID=TargetID 的脚本标签之间的JSON 中的信息。 .

我做了什么

我编写了以下 Python 3.6 代码:

from bs4 import BeautifulSoup
import codecs

page_path="/Users/me/Page01.htm"

page = codecs.open(page_path, "r", "utf-8")

soup = BeautifulSoup(page.read(), "lxml")
vegas = soup.find_all(id="TargetID")

invalid_tags = ['script']
soup = BeautifulSoup(str(vegas),"lxml")
for tag in invalid_tags:
for match in soup.findAll(tag):
match.replaceWithChildren()

JsonZ = str(soup)

现在,如果我看里面vegas我能看到的变量

[<script id="TargetID" type="application/json"><![CDATA[ {
> "name":"Kate", "age":22, "city":"Boston"} ]]> </script>]

但是如果我尝试删除脚本标签(使用 this answer 脚本),我会得到以下 JsonZ变量

'<html><body><p>[&lt;![CDATA[\n{ "name":"Kate", "age":22, "city":"Boston"}\n]]&gt;\n]</p></body></html>'

没有脚本标签但有另外 3 个标签 ( <html><body><p> ) 完全没用。我的目标是获取以下字符串 { "name":"Kate", "age":22, "city":"Boston"}加载 Python JSON 模块。

最佳答案

BeautifulSoup 几乎可以接受任何东西,并尝试将其转换为完整的 HTML 页面。这就是您收到 '<html><body> ...' 的原因.通常这是一件好事,因为 HTML 的格式可能很糟糕,但 BeautifulSoup 仍会处理它。

在您的情况下,提取该 json 的一种方法是这样的。

>>> import bs4
>>> page = bs4.BeautifulSoup(open('Page01.htm').read(), 'lxml')
>>> first_script = page.select('#TargetID')[0].text
>>> first_script
'<![CDATA[\n{ "name":"Kate", "age":22, "city":"Boston"}\n]]>\n'
>>> content = first_script[first_script.find('{'): 1+first_script.rfind('}')]
>>> content
'{ "name":"Kate", "age":22, "city":"Boston"}'

一旦你有了这个,你就可以把它变成一个 Python 字典,就像这样。

>>> import json
>>> d = json.loads(content)
>>> d['name']
'Kate'
>>> d['age']
22
>>> d['city']
'Boston'

关于python - 为什么 BeautifulSoup 将 <html><body><p> 添加到我的结果中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48508942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com