<img width="410" height="410" #src="http://XXXX1.png" src="http://xxxx2.png" alt=""/>
我想提取图片地址http://xxxx1.png,
我正在使用/ img / @#src但是什么都没有。它包含#char。
有什么建议吗? 谢谢你的帮助。
答案 0 :(得分:2)
<img width="410" height="410" #src="http://XXXX1.png" src="http://xxxx2.png" alt=""/>
不幸的是,你不能用XPath做这件事,因为这个片段是无效的XML。 An XML NameChar cannot start, or contain, the hash symbol。并且XPath只能处理XML树,并且从这个片段中,你不能创建这样的树(任何XML解析器都会破坏该片段)。
要解决此问题,请通过删除该符号来预处理非真正的XML并使其正确。或者在源头修复它,如果你有权访问它,通过不生成无效的名称开始。
注意:XML(或HTML)中没有使用某种转义序列的机制。实体引用只能在值和文本节点中使用。
答案 1 :(得分:0)
如果它不是有效的XML,则不能使用XPath来查询该属性,因为XPath表达式中的名称是无效语法。
由于它甚至不是有效的HTML属性名称,因此您需要一个宽松的HTML解析器,它不会阻塞该属性和甚至将其保留在结果中,而不是忽略无效的属性名称。 BeautifulSoup与html5lib
的组合用于解析似乎有效。 Python标准库中的HTML解析器会阻塞该属性,而lxml.html
会默默地忽略它。
In [33]: import bs4
In [34]: source
Out[34]: '<img width="410" height="410" #src="http://XXXX1.png" src="http://xxxx2.png" alt=""/>'
In [35]: doc = bs4.BeautifulSoup(source, 'html5lib')
In [36]: doc.img.attrs
Out[36]:
{u'#src': u'http://XXXX1.png',
u'alt': '',
u'height': u'410',
u'src': u'http://xxxx2.png',
u'width': u'410'}
In [37]: doc.img.attrs['#src']
Out[37]: u'http://XXXX1.png'