为什么BeautifulSoup将<html> <body> <p>添加到我的结果中?

尼古拉西斯

问题

我有以下 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>

我想使用提取脚本标签之间JSON内的信息ID=TargetID

我做了什么

我编写了以下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>]

但是,如果我尝试删除脚本标签(使用此答案脚本),则会得到以下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'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何阻止tinymce将<!DOCTYPE html> <html> <head> </ head> <body>添加到我输入的所有内容中?

禁止Intellij将<p>添加到我的空注释行中

难以将动画添加到我的 html 附加

将数据添加到我的HTML MVC部分

使用javascript中的body标签ID将文本添加到<p>标签

将HTML代码添加到body标签的Javascript代码

我如何使用 html 和 echo 将 onclick 函数添加到我的 php 代码中

在Vue.js 2.0中将CSS类添加到HTML或BODY标签

将 DOCTYPE html 添加到我的 index.html 会破坏我的 javascript

为什么我会获得http://takeoverAd.html/?添加到我在archive.org上的URL中?

将类添加到HTML标记(<p>)返回错误

什么是$$ hashKey添加到我的JSON.stringify结果中

如何将Digit地点添加到我的结果中?

将“选择”语句的结果添加到我从其他几个表构建的表中

Express Node JS POST。如何不使用url参数将值添加到我的req.body

如何将管理仪表板功能添加到我的PSK应用程序?为什么我无法进入admin.html页面?

如何使用CSS,JS和HTML将Google搜索面板添加到我的网站?

如何使用JavaScript将数组添加到我的HTML

如何将外部.js脚本添加到我的index.html

如何将第二个模态添加到我的HTML页面

如何将引导程序添加到我的网站到 html 代码

为什么在加载函数后html body不打印<p>元素?

为什么将pod中的文件添加到我的覆盖率报告中?

为什么Kubuntu将.directoy文件添加到我的目录中?

为什么Protege将`xml`命名空间添加到我的本体中?

为什么Go将字节添加到我的字符串中?

为什么 Django 模板引擎将 myapp/myview 添加到我的 URL 中?

为什么将undefined添加到我的字符串中?

将重复的键添加到我的字典中