scrapy xpath

注意 // 表示根节点

中间节点 寻找应该是 .// 标示当前节点下所有(//)   ./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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值