xpath抓取html不完全,scrapy的xpath是否取HTML标签的情况分析

在我们取得response的select的解析器中,示例中都是用的text()函数,实际上它只能取到第一级的纯文件,如果包含的内容有其它的Html标签,将不能取到;具体情况有如下几种:

1. response.xpath('//div[@id="c"]/text()').extract()

如果在div的id为c的内容中,全是html为p等标签,那么取到的内容就是就是\n,\t之类的字符;

因为:text()是取此xpath内部第一级纯文本,所以只适合提取纯文本,不适合提取html

如:

a

b

只能取到 a

2.response.xpath('//div[@id="c"]').extract()

可以提取到html内容,但开头包含

。其包括标签内的所有的内容,同时也包括标签本身。

可以取到:

a

b

3.response.xpath('//div[@id="c"]/*').extract()

可以提取到内部的所有html内容,是以列表的形式,要转换成字符串

用"".join(response.xpath('//div[@id="c"]/*').extract())就可以了

注意response.xpath('//div[@id="c"]/*').extract()取不到第一级纯文本

示例:其无法取到如上讲到的1中的字符,即无法取到"

a

b

"中的a,只能取到"

b

"

response.xpath('//div[@id="c"]/node()').extract()

node()可以取到所有子节点的内容,包括前后的html标签。

参考

http://stackoverflow.com/questions/11463538/scrapy-html-xpath-selector-return-result-as-html

4.提取标签内部纯文本而不是html呢?

直接用"".join(response.xpath('//div[@id="c"]//text()').extract()

xpath中一个/只代表提取直接子节点,//可以提取所有子节点

也可以参考如下的方法:

scrapy提取标签下的所有非html标签的方法

http://www.xoxxoo.com/article/show/i/280.html

测试代码:scrapy shell “url".

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值