在我们取得response的select的解析器中,示例中都是用的text()函数,实际上它只能取到第一级的纯文件,如果包含的内容有其它的Html标签,将不能取到;具体情况有如下几种:
1. response.xpath('//div[@id="c"]/text()').extract()
如果在div的id为c的内容中,全是html为p等标签,那么取到的内容就是就是\n,\t之类的字符;
因为:text()是取此xpath内部第一级纯文本,所以只适合提取纯文本,不适合提取html
如:
b
只能取到 a
2.response.xpath('//div[@id="c"]').extract()
可以提取到html内容,但开头包含
可以取到:
b
3.response.xpath('//div[@id="c"]/*').extract()
可以提取到内部的所有html内容,是以列表的形式,要转换成字符串
用"".join(response.xpath('//div[@id="c"]/*').extract())就可以了
注意response.xpath('//div[@id="c"]/*').extract()取不到第一级纯文本
示例:其无法取到如上讲到的1中的字符,即无法取到"
b
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".