scrapy xpath

来源:互联网 发布:网络十大神神兽为什么 编辑:程序博客网 时间:2024/06/07 01:33

注意 // 表示根节点

中间节点 寻找应该是 .// 标示当前节点下所有(//)   ./h1 或者 h1 标示当前的直接子节点

a=selector("<div class='1'><a>a</a><a>b</a></div><div class='1'><a>aa</a><a>bb</a></div>"); 

以下是完全一样的结果

a.xpath(//div[@class="1"]/a/text()) //text取值文本 但是这里返回的依然是select列表 extract后才只显示文本

a.xpath(//div[@class="1"]//a/text())


text 表示取第一级文本 extract表示返回unicode字符串列表, extract_first(default="xx") 标示取返回列表中第一个值返回




获取title标签中的文本
hxs.select("//title/text()")

只显示文本,而不是一个XPathSelectorList
hxs.select("//title/text()").extract()



用scrapy shell来测试http://finance.ifeng.com/a/20140821/12969341_0.shtml,提取正文

http://scrapy-chs.readthedocs.io/zh_CN/0.24/topics/selectors.html?highlight=xpath

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

提取到的不是空的,就是\n,\t之类的字符


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


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

这次倒是可以提取到html内容了,但是开头包含<div id="main_content" ,结尾包含</div>

不太纯净


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

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

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


某些情况下response.xpath('//div[@id="main_content"]/*').extract()也取不到完整的内容

建议用

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

参考

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


4.那怎么提取所有内部纯文本而不是html呢?


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

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


参考

http://stackoverflow.com/questions/5390133/scrapy-body-text-only

原创粉丝点击