Python 除了 BS4,还有其他能精简 html 代码的库吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
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

Python 除了 BS4,还有其他能精简 html 代码的库吗?

  •  
  •   omg21 May 29, 2017 3817 views
    This topic created in 3256 days ago, the information mentioned may be changed or developed.

    《 span lang="EN-US" style="font-size: 16pt;"》天空《/span 》《 p class="MsoNormal" style="text-indent:28.0pt;mso-char-indent-count:2.0;line-height:20.0pt;so-line-height-rule:exactly"》

    我想把类似上面这样的 html 代码(为了方便发布,我把尖括号换成了《》)精简下,精简成下面这样:

    《 span 》天空《/span 》《 p style="text-indent:28.0pt;line-height:20.0pt;"》

    能看出,我把《 span 》中的 lang 和字号属性删掉了,把《 p 》中 style 属性里的首行缩进和行高留了下来,删除了其他的。 我想知道除了 BS4,其他还有能处理我这个需求的库吗? BS4 能处理 lang、class 这样的属性,但是 style 里面的属性没法处理。

    11 replies    2017-05-30 14:22:31 +08:00
    7sDream
        1
    7sDream  
       May 29, 2017
    BS 可以获取到 inline style 的,用 element['style'] 就行,不过如果如果你是要把 style 当作一个 dict 这种来处理 BS 好像确实没有自带。

    不过你可以把 style string 喂给一个 CSS parser,然后按要求处理完再写回去,这样应该可以吧。

    Python 的 CSS parser 应该有很多吧……
    KgM4gLtF0shViDH3
        2
    KgM4gLtF0shViDH3  
       May 29, 2017
    pyquery
    lxml
        3
    lxml  
       May 29, 2017
    只针对这个例子,我同意一楼的,我印象中似乎找不到能单独处理某个属性中的某个子属性,把 style 拎出来,按照";"分割成 dict,自己写个函数再拼装回去,text-indent line-heigh,不是很优雅,但好像没有什么更好的解决方案的,我已知的库最小处理单元就是属性本身了。
    dsg001
        4
    dsg001  
       May 29, 2017
    lxml,w3lib 这两个可以处理一部分,style 需要自己写处理器
    omg21
        5
    omg21  
    OP
       May 29, 2017
    @7sDream
    @lxml
    @dsg001
    看来只能自己再写函数了,其实我觉得过渡依赖 bs4 也不是好事,就怕以后升级某些功能被修改了更麻烦。
    aljun
        6
    aljun  
       May 29, 2017
    @7sDream 好久不见 7s。。。
    anuan
        7
    anuan  
       May 29, 2017
    不太理解这个需求 如果只是几个标签的解个 css 需要保留 其他的属性都删除 直接用正则比较好
    mseasons
        8
    mseasons  
       May 30, 2017
    lxml?
    justtery
        9
    justtery  
       May 30, 2017 via Android
    pyquery 滑稽
    omg21
        10
    omg21  
    OP
       May 30, 2017
    @anuan 最麻烦的地方在 style 里,比如有一些表格的 style 里会有表格线是需要保留的,但同时还有一些像字体字号之类的需要删除的。用正则不太好做。
    7sDream
        11
    7sDream  
       May 30, 2017
    @aljun 倒是真的好久没上 V2 了……
    About     Help     Advertise     Blog     API     FAQ     Solana     5084 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 56ms UTC 09:46 PVG 17:46 LAX 02:46 JFK 05:46
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86