繁体   English   中英

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

[英]How to unescape special characters while converting pyquery object to string

我试图用python请求模块获取远程页面,重建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仔细阅读该页面。 它有一节“使用电子工厂创建HTML” 在该部分之后,他们指出etree.tostring() method仅适用于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()

希望将来能帮你们节省一些时间! 玩得开心! ;)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM