我有多个垃圾HTML源,我想以编程方式修复。它们是HTML文件,具有附加到元素的相同类型的多个属性,这在HTML中显然是不对的。此类标签的示例:
$$ElmLodlv
我要对此标记做的是只留下第一个非空<img alt=" " alt="Turtle" src="turtle.png" alt alt="Funny Turtle" alt="">
属性(仅限空格),如下所示:
alt
如果只有空或仅空白属性,则属性可以消失。
我正在考虑为此任务使用正则表达式,但它似乎太容易出错。避免从标记内部删除看起来像属性的文本并非易事。
更好的解决方案是DOM解析器,但我所看到的只是忽略重复的属性,使属性数组关联,所以在这种情况下例如:
<img alt="Turtle" src="turtle.png">
如果只有解析器可以获得所有属性,例如:
[
'alt' => ' ',
'src' => 'turtle.png',
]
修复它会非常容易。我只是去找重复项,然后在节点上设置为第一个值。
是否有任何DOM解析器获取所有属性,包括重复项?
答案 0 :(得分:0)
不知道php的合适解析器,但作为替代解决方案,您可以使用python HTMLParser。
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
if tag=='img':
print "tag:", tag, "attrs:",attrs
parser = MyHTMLParser()
parser.feed('<html><body><h1><img alt=" " alt="Turtle" src="turtle.png" alt alt="Funny Turtle" alt="">Parse me!</h1></body></html>')
# output:
# tag: img attrs: [('alt', ' '), ('alt', 'Turtle'), ('src', 'turtle.png'), ('alt', None), ('alt', 'Funny Turtle'), ('alt', '')]