XPath匹配標簽使用text()判斷獲取結果失敗/為空的問題及解決方法


XPath當匹配標簽判斷text()判斷內容失敗的問題及解決

問題復現

在爬取網站的時候我使用XPath去抓取網頁上的內容,XPath表達式來精准獲取需要的標簽內容。

當我對如下一段html代碼編寫XPath表達式抓取的時候出現了問題,代碼如下。片名兩個字中間有七個空格,我想要獲取<dd></dd>中的內容。

<dl class="clearfloat margin-30">
    <dt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</dt>
    <dd>愛貓之城</dd>
</dl>

我很自然地使用了如下的表達式。

FilmName = html.xpath('//dt[text()="色&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;彩"]/following-sibling::dd/text()')
FilmName = html.xpath('//dt[text()="色       彩"]/following-sibling::dd/text()')

但是竟然沒有獲取到。於是把轉義字符換成7個空格也是沒有用。

解決思路

我使用另一種辦法把<dt></dt>中的內容用text()抓取出來。

FilmName = html.xpath('/html/body/section[3]/div/ul/li/div[2]/ul[2]/dl[1]/dt/text()')

得到內容為:

'色\xa0\xa0\xa0\xa0\xa0\xa0\xa0彩'

這個是才意識到,在XPath中匹配的是unicode編碼的不間斷空格符(&nbsp;),所以將上面的空格全部替換為’\xa0‘即可。

FilmName = html.xpath('//dt[text()="色\xa0\xa0\xa0\xa0\xa0\xa0\xa0彩"]/following-sibling::dd/text()')

問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM