xpath的一般用法与特殊用法

# xpath的使用
安装lxml
from lxml import etree
Selector = etree.HTML(网页代码)
Selector.xpath(一段神奇的代码)

xpath的一般用法
//定位根节点
/表示往下层寻找
/text()提取文本内容
/@***提取属性

例: response.xpath('//ul[@id="useful"]/li/text()')
中括号[]表示限定ul的条件,这里表示id为useful的ul标签

xpath的特殊用法

第一种情况:以相同的字符开始的情况,提取以下三个内容难道要写三次?
解决方法:用starts-with(@属性名称,属性相同的部分)
举例:
<div id='test-1'>需要的内容1</div>
<div id='test-2'>需要的内容2</div>
<div id='test-fault'>需要的内容3</div>
方案:response.xpath("//div[starts-with(@id, 'test')]/text()")


第二种情况:标签套标签,下面的情况如何提取成一句完整的话?div套着的标签如何提取?
解决方法:string(.)
举例:
html = '''
<div id="class3">
    我左青龙,
    <span id='tiger'>
        右白虎,
        <ul>上朱雀,
            <li>下玄武.</li>
        </ul>
        老牛在当中,
    </span>
    龙头在胸口.
</div>
'''
# 方案:
from lxml import etree
selector = etree.HTML(html)
data = selector.xpath('//div[@id="class3"]')[0]
info = data.xpath('string(.)')#实际上是去除了div中间的其他多余标签
print(info)
content2=info.replace('\n','').replace(' ','')#将换行与空格分别取代
print(content2)

# 输出结果:我左青龙,右白虎,上朱雀,下玄武.老牛在当中,龙头在胸口.

 

posted @ 2017-06-25 20:22  道高一尺  阅读(4538)  评论(0编辑  收藏  举报