XPath匹配標簽使用text()判斷獲取結果失敗/為空的問題及解決方法 ...
XPath當匹配標簽判斷text()判斷內容失敗的問題及解決
問題復現
在爬取網站的時候我使用XPath去抓取網頁上的內容,XPath表達式來精準獲取需要的標簽內容。
當我對如下一段html代碼編寫XPath表達式抓取的時候出現了問題,代碼如下。片名兩個字中間有七個空格,我想要獲取<dd></dd>中的內容。
<dl class="clearfloat margin-30"> <dt>片 名</dt> <dd>愛貓之城</dd> </dl>
我很自然地使用瞭如下的表達式。
FilmName = html.xpath('//dt[text()="色 彩"]/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編碼的不間斷空格符( ),所以將上面的空格全部替換為’\xa0‘即可。
FilmName = html.xpath('//dt[text()="色\xa0\xa0\xa0\xa0\xa0\xa0\xa0彩"]/following-sibling::dd/text()')
問題解決。