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()')问题解决。
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!