xpath提取所有节点文本

解析
xpath提取所有节点文本

我左青龙, 右白虎,
  • 上朱雀,
  • 下玄武。
老牛在当中,龙头在胸口。
使用xpath的string(.)

#!/usr/bin/env python

-- coding: utf-8 --

from scrapy.selector import Selector
text = ‘

我左青龙, 右白虎,
  • 上朱雀,
  • 下玄武。
老牛在当中,龙头在胸口。

s = Selector(text=text)
data = s.xpath(’//div[@id=“test3”]’)
info = data.xpath(‘string(.)’).extract()[0]
print(info)

output: 我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。

1.具体代码如下:

>>> from scrapy.selector import Selector
>>> text = '<div id="test3">我左青龙,<span id="tiger">右白虎,<ul>上朱雀,<li>下玄武。</li></ul>老牛在当中,</span>龙头在胸口。<div>'
>>> Selector(text=text)
<Selector xpath=None data='<html><body><div id="test3">我左青龙,<span i'>
>>> s=Selector(text=text)
>>> data=s.xpath('//div[@id="test3"]')
>>> data
[<Selector xpath='//div[@id="test3"]' data='<div id="test3">我左青龙,<span id="tiger">右白'>]
>>> info=data.xpath('string(.)').extract()[0]
>>> info
'我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。'
>>> info1=data.xpath('string(.)')
>>> info1
[<Selector xpath='string(.)' data='我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。'>]
>>> info2=data.xpath('string(.)').extract()
>>> info2
['我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。']
>>> info3=data.xpath('string(.)').extract()[0]
>>> info3
'我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。'
>>> 
>>>> "".join(s.xpath('//div[@id="test3"]//text()').extract())
'我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。'

2 同时选择多个属性

c=response.xpath(’//div[@class=“visa_table_info”][@data-key=“1”]’)

注意 response.xpath(’//div’) 标示根目录下所有div (包括直接和间接div) response.xpath(’/div’)直接div

如何解决详情页面元素改变

这个问题是这样产生的,在很多PC站,比如链家,这个页面有这些字段A,但是下个页面这个字段A没了,取而代之的是字段B,在xpath定位时就失效了。这个问题很常见,大体思路是这样的。

创建一个包含所有字段的dict: data = {}.fromkeys((‘url’, ‘price’, ‘address’))
然后根据网页中是否有字段来取值,例如,有’url’就取对应的value,没有则为空
这样就可以完美解决匹配不全问题

参考:https://blog.csdn.net/qq_41888542/article/details/81213824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值