<img width="410" height="410" #src="http://XXXX1.png" src="http://xxxx2.png" alt=""/>
我想提取圖像地址http://xxxx1.png,
我使用/ IMG/@#src,卻得到nothing.it包含#字符。的XPath屬性包含特殊字符
有什麼建議嗎? 感謝您的幫助。
<img width="410" height="410" #src="http://XXXX1.png" src="http://xxxx2.png" alt=""/>
我想提取圖像地址http://xxxx1.png,
我使用/ IMG/@#src,卻得到nothing.it包含#字符。的XPath屬性包含特殊字符
有什麼建議嗎? 感謝您的幫助。
<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)中沒有使用某種轉義序列的機制。實體引用只能用於值和文本節點。
謝謝,我通過將#src替換爲其他標記來解決問題, – toolater
如果它不是有效的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'
爲什麼會出現'#'?我不認爲這是有效的HTML –
@JamieRees:它不是。儘管瀏覽器像現在這樣運行,但如果它真的在瀏覽器中被解析,我不會感到驚訝。但它絕對不是有效的XML或HTML。 – Abel
它是HTML,而不是xml格式。 – toolater