【问题标题】:Python - beautifulsoup changes attribute positioningPython - beautifulsoup 更改属性定位
【发布时间】:2020-07-18 17:41:18
【问题描述】:

您好,我正在尝试解析 html 代码 我附上几行html

<link rel="stylesheet" href="assets/css/fontawesome-min.css">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/xsIcon.css">

当我将它加载到 beautifulsoup 中时,它会按字母顺序更改属性位置,如下面的代码

<link href="assets/css/fontawesome-min.css" rel="stylesheet"/>
<link href="assets/css/bootstrap.min.css" rel="stylesheet"/>
<link href="assets/css/xsIcon.css" rel="stylesheet"/>

你可以看到最初的区别 rel 在重新加载和写入文件之后的 href 之前的属性更改顺序。

有什么办法可以防止这种情况发生。 谢谢

【问题讨论】:

  • 有趣 - 从未注意到。但是你为什么在乎呢?
  • 我的客户说这对 SEO 很重要

标签: python beautifulsoup html-parsing


【解决方案1】:

documentation,您可以使用自定义HTMLFormatter

from bs4 import BeautifulSoup
from bs4.formatter import HTMLFormatter


txt = '''<link rel="stylesheet" href="assets/css/fontawesome-min.css">
<link rel="stylesheet" href="assets/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/xsIcon.css">'''

class UnsortedAttributes(HTMLFormatter):
    def attributes(self, tag):
        for k, v in tag.attrs.items():
            yield k, v

soup = BeautifulSoup(txt, 'html.parser')

#before HTMLFormatter
print( soup )

print('-' * 80)

#after HTMLFormatter
print( soup.encode(formatter=UnsortedAttributes()).decode('utf-8') )

打印:

<link href="assets/css/fontawesome-min.css" rel="stylesheet"/>
<link href="assets/css/bootstrap.min.css" rel="stylesheet"/>
<link href="assets/css/xsIcon.css" rel="stylesheet"/>
--------------------------------------------------------------------------------
<link rel="stylesheet" href="assets/css/fontawesome-min.css"/>
<link rel="stylesheet" href="assets/css/bootstrap.min.css"/>
<link rel="stylesheet" href="assets/css/xsIcon.css"/>

【讨论】:

    猜你喜欢
    • 2013-02-25
    • 2022-07-07
    • 2018-11-05
    • 2018-02-22
    • 1970-01-01
    • 2021-04-09
    • 2016-01-22
    • 2017-03-26
    相关资源
    最近更新 更多