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 = '
我左青龙,右白虎,
    上朱雀,
  • 下玄武。
老牛在当中,
龙头在胸口。
' >>> Selector(text=text) >>> s=Selector(text=text) >>> data=s.xpath('//div[@id="test3"]') >>> data [] >>> info=data.xpath('string(.)').extract()[0] >>> info '我左青龙,右白虎,上朱雀,下玄武。老牛在当中,龙头在胸口。' >>> info1=data.xpath('string(.)') >>> info1 [] >>> 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

你可能感兴趣的:(xpath提取所有节点文本)