gpt4 book ai didi

python - 如何在将 pyquery 对象转换为字符串时取消转义特殊字符

转载 作者:行者123 更新时间:2023-11-30 23:39:33 24 4
gpt4 key购买 nike

我正在尝试使用 python requests 模块获取远程页面,重建 DOM 树,进行一些处理并将结果保存到文件中。当我获取页面然后将其写入文件时,一切正常(我可以稍后在浏览器中打开一个 html 文件,并且它会正确呈现)。

但是,如果我创建一个 pyquery 对象并进行一些处理,然后使用 str 转换保存它,则会失败。具体来说,像 && 等特殊字符在保存的源的脚本标签中被修改(由 pyquery 的应用引起),并且它会阻止页面正确渲染。

这是我的代码:

import requests
from lxml import etree
from pyquery import PyQuery as pq

user_agent = {'User-agent': 'Mozilla/5.0'}
r = requests.get('http://www.google.com',headers=user_agent, timeout=4)

DOM = pq(r.text)
#some optional processing
fTest = open("fTest.html","wb")
fTest.write(str(DOM))
fTest.close()

所以,问题是:如何确保在应用 pyquery 后特殊字符不会被转义? 我想它可能与 lxml (pyquery 的父库)有关,但是在乏味之后在线搜索并尝试不同的对象序列化方式我仍然没有成功。也许这也与 unicode 处理有关?!

非常感谢!

最佳答案

我找到了一个优雅的解决方案来解决这个问题以及代码之前不起作用的原因。

首先,您可以仔细阅读http://lxml.de/lxmlhtml.html页面。它有一个部分“使用 E-factory 创建 HTML”。在本节之后,他们指出 etree.tostring() 方法 仅适用于 XML。但对于具有脚本或样式标签的额外可能性的 HTML 来说,它会把事情弄乱。所以..其次,解决方案是使用重载方法html.tostring()

最终的工作代码是:

# for networking
import requests
# for parsing and serialization
from lxml import etree
from lxml.html import tostring as html2str # IMPORTANT!!!
from pyquery import PyQuery as pq

user_agent = {'User-agent': 'Mozilla/5.0'}
r = requests.get('http://www.google.com',headers=user_agent, timeout=4)

# construct DOM object
DOM = pq(r.text)
# do stuff with DOM
#
# save result to file
fTest = open("fTest.html","wb")
fTest.write(html2str(DOM.root)) # IMPORTANT!!!
fTest.close()

希望它能在将来节省你们中的一些人的时间!玩得开心! ;)

关于python - 如何在将 pyquery 对象转换为字符串时取消转义特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13437476/

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