我有多个垃圾HTML源,我想通过编程来修复它们。它们是具有相同类型的多个属性附加到元素的HTML文件,这在HTML中显然是不正确的。这样的标签示例:
<img alt=" " alt="Turtle" src="turtle.png" alt alt="Funny Turtle" alt="">我想对这个标记做的是只保留第一个非空的alt属性(只有空格被认为是空的),如下所示:
<img alt="Turtle" src="turtle.png">如果只有空属性或只有空格的属性,则该属性可以消失。
我正在考虑使用正则表达式来完成这项任务,但它似乎太容易出错。要避免从标记内部删除看起来像属性的文本,并不是一件容易的事。
更好的解决方案是DOM解析器,但我看到的只是忽略重复的属性,使属性数组关联,例如:
[
'alt' => ' ',
'src' => 'turtle.png',
]如果解析器可以获得所有属性,就像这样:
[
['name' => 'alt', 'value' => ' '],
['name' => 'alt', 'value' => 'Turtle'],
['name' => 'src', 'value' => 'turtle.png'],
['name' => 'alt', 'value' => null],
['name' => 'alt', 'value' => 'Funny Turtle'],
['name' => 'alt', 'value' => ''],
]这将是相当容易修复它。我只需要找到副本,然后将节点上的attibute设置为第一个值。
是否有任何DOM解析器获取所有属性,包括重复的属性?
发布于 2018-03-12 05:34:04
不知道适合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', '')]https://stackoverflow.com/questions/49208771
复制相似问题