V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
omg21
V2EX  ›  Python

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

  •  
  •   omg21 · 2016-11-26 13:19:24 +08:00 · 1962 次点击
    这是一个创建于 2954 天前的主题,其中的信息可能已经有所发展或是发生改变。
    还是关于这个 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 有这几个文件,得从哪里开始啃?
    5 条回复    2016-11-26 20:27:06 +08:00
    sagaxu
        1
    sagaxu  
       2016-11-26 14:10:18 +08:00
    attrs 是用 dict 存的, dict 本身就不保证顺序,然后在 decode 的时候还做了排序,如果要保序,你需要把 attrs 改造成 list ,然后所有读写 attrs 的地方都要修改,估计得小半天才能改完
    mkeith
        2
    mkeith  
       2016-11-26 14:19:58 +08:00
    顺序有什么关系吗?
    congeec
        3
    congeec  
       2016-11-26 15:14:09 +08:00 via iPhone
    启动 python 前加 PYTHONHASHSEED=0 环境变量。搜一下你就知道为吗乱续了
    wangxkww
        4
    wangxkww  
       2016-11-26 16:07:35 +08:00
    @sagaxu OrderedDict 会不会更容易改些……
    264768502
        5
    264768502  
       2016-11-26 20:27:06 +08:00 via Android
    乱序是 xml 标准的一环
    不是 bs4 带来的乱序,是 xml 的 parser 引起的乱序
    elementtree 可以 hack 它的函数,来保持原有的顺序(sf 上有人贴了代码的)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2711 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:49 · PVG 13:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.