xpath通过text()方式获取div节点下的文本存在bug

环境: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 *^*

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值