我想修改 BS4 的原代码,让其禁止重新排序,不知道该改哪?

2016-11-26 13:19:24 +08:00
 omg21
还是关于这个 BS4 处理代码重新排序的问题,如下:
<td height="250" class="infodetail" id="TDContent" valign="top">
上边这行代码经过 BeautifulSoup 处理后会变成
<td class="infodetail" height="250" id="TDContent" valign="top">
根据标签属性的顺序进行了重新排序。

我现在想着手在 BS4 的原代码里修改,让其禁止排序,原样输出,可是看了代码后就蒙了懵了,根本不知道从哪下手啊。。。
__init__.py dammit.py diagnose.py element.py testing.py
BS4 有这几个文件,得从哪里开始啃?
1959 次点击
所在节点    Python
5 条回复
sagaxu
2016-11-26 14:10:18 +08:00
attrs 是用 dict 存的, dict 本身就不保证顺序,然后在 decode 的时候还做了排序,如果要保序,你需要把 attrs 改造成 list ,然后所有读写 attrs 的地方都要修改,估计得小半天才能改完
mkeith
2016-11-26 14:19:58 +08:00
顺序有什么关系吗?
congeec
2016-11-26 15:14:09 +08:00
启动 python 前加 PYTHONHASHSEED=0 环境变量。搜一下你就知道为吗乱续了
wangxkww
2016-11-26 16:07:35 +08:00
@sagaxu OrderedDict 会不会更容易改些……
264768502
2016-11-26 20:27:06 +08:00
乱序是 xml 标准的一环
不是 bs4 带来的乱序,是 xml 的 parser 引起的乱序
elementtree 可以 hack 它的函数,来保持原有的顺序(sf 上有人贴了代码的)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/323455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX