scrapy的xpath是否取HTML标签的情况分析

[scrapy] 2024-05-09 圈点750

摘要:scrapy取得某个HTML标签内的所有内容的情况分析.extract(),text(),node()等情况分析。

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


1. response.xpath('//div[@id="c"]/text()').extract()
如果在div的id为c的内容中,全是html为p等标签,那么取到的内容就是就是\n,\t之类的字符;

因为:text()是取此xpath内部第一级纯文本,所以只适合提取纯文本,不适合提取html
如:<div id=c>a<p>b</p></div>

只能取到 a


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

可以提取到html内容,但开头包含<div id="c" ,结尾包含</div>。其包括标签内的所有的内容,同时也包括标签本身。
可以取到:<div id=c>a<p>b</p></div>

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

可以提取到内部的所有html内容,是以列表的形式,要转换成字符串
用"".join(response.xpath('//div[@id="c"]/*').extract())就可以了


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

示例:其无法取到如上讲到的1中的字符,即无法取到"<div id=c>a<p>b</p></div>"中的a,只能取到"<p>b</p>"


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".


scrapy  xpath  html  

感谢反馈,已提交成功,审核后即会显示