爬虫基础_——佘响平2.3

阅读 39

2022-04-14

使用xpath

使用时先安装lxml包

开始使用

#和beautifulsoup类似,首先我们需要得到一个文档树把文本转换成一个文档树对象

from lxml import etree
if __name__ == '__main__':
    doc='''
        <div>
            <ul>
                 <li class="item-0"><a href="link1.html">first item</a></li>
                 <li class="item-1"><a href="link2.html">second item</a></li>
                 <li class="item-inactive"><a href="link3.html">third item</a></li>
                 <li class="item-1"><a href="link4.html">fourth item</a></li>
                 <li class="item-0"><a href="link5.html">fifth item</a> # 注意,此处缺少一个 </li> 闭合标签
             </ul>
         </div>
        '''

    html = etree.HTML(doc)
    result = etree.tostring(html)
    print(str(result,'utf-8'))

把文件转换成一个文档树对象

from lxml import etree

# 读取外部文件 index.html
html = etree.parse('./index.html')
result = etree.tostring(html, pretty_print=True)    #pretty_print=True 会格式化输出
print(result)

均会打印出文档内容

节点、元素、属性、内容

1路径表达式

    /   根节点,节点分隔符,
    //  任意位置
    .   当前节点
    ..  父级节点
    @   属性
2通配符

    *   任意元素
    @*  任意属性
    node()  任意子节点(元素,属性,内容)
3谓语

    //a[n] n为大于零的整数,代表子元素排在第n个位置的<a>元素
    //a[last()]   last()  代表子元素排在最后个位置的<a>元素
    //a[last()-]  和上面同理,代表倒数第二个
    //a[position()<3] 位置序号小于3,也就是前两个,这里我们可以看出xpath中的序列是从1开始
    //a[@href]    拥有href的<a>元素
    //a[@href='www.baidu.com']    href属性值为'www.baidu.com'的<a>元素
    //book[@price>2]   price值大于2的<book>元素
4多个路径

//book/title | //book/price  
 

精彩评论(0)

0 0 举报