环境:scrapy1.8 , python3.7.3
div块如下:
<div class="li_b_l">
<span class="money">12k-20k</span>
<!--<i></i>-->经验3-5年 / 大专
</div>
用形如
x=response.xpath("//div[@class='li_b_l']/text()").getall()
print(x)
获取的文本列表为
['\n ', '\n ', '经验3-5年 / 本科\n
', '\n
', '\n ', '\n
', '\n ', '\n
', '\n
', '\n ']
竟然有十条文本,莫名奇妙会多很多文本,而我只是想要div块中的文本,我认为text()节点应该只会给我返回三条文本
①span节点前的换行符和空格
②span节点后的换行符和空格
③注释后的文本和换行符
怀疑是scrapy的xpath函数有bug,我将div块用lxml解析为html后,用lxml的xpath()函数测试:
from lxml import etree
html="""<div class="li_b_l">
<span class="money">12k-20k</span>
<!--<i></i>-->经验3-5年 / 大专
</div>"""
element=etree.HTML(html)
text=element.xpath(".//div[@class='li_b_l']/text()")
print(text)
['\n ', '\n ', '经验3-5年 / 大专\n ']
三条文本输出,结果和我的设想一样,但是为什么scrapy的xpath函数竟然有十条文本输出呢?
原因可能有:
①同样的html代码,scrapy的解析和lxml的解析不一样,有可能scrapy会多添加空格和换行进去.
②scrapy的xpath和lxml的xpath处理方式不一样.
③才疏学浅,关于xpath还有我不知道的的点.
烦请大家看看,place *^*