zoukankan      html  css  js  c++  java
  • XPath在python中的高级应用

    XPath在python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线。

    XPath介绍: 
    是什么? 全称为XML Path Language 一种小型的查询语言 
    说道XPath是门语言,不得不说它所具备的优点: 
    1) 可在XML中查找信息 
    2) 支持HTML的查找 
    3) 通过元素和属性进行导航

    python开发使用XPath条件: 
    由于XPath属于lxml库模块,所以首先要安装库lxml,具体的安装过程可以查看博客,包括easy_install 和 pip 的安装方法。

    XPath的简单调用方法:

    from lxml import etree
    selector=etree.HTML(源码)  #将源码转化为能被XPath匹配的格式
    selector.xpath(表达式)  #返回为一列表

    XPath的使用方法: 
    首先讲一下XPath的基本语法知识: 
    四种标签的使用方法 
    1) // 双斜杠 定位根节点,会对全文进行扫描,在文档中选取所有符合条件的内容,以列表的形式返回。 
    2) / 单斜杠 寻找当前标签路径的下一层路径标签或者对当前路标签内容进行操作 
    3) /text() 获取当前路径下的文本内容 
    4) /@xxxx 提取当前路径下标签的属性值 
    5) | 可选符 使用|可选取若干个路径 如//p | //div 即在当前路径下选取所有符合条件的p标签和div标签。 
    6) . 点 用来选取当前节点 
    7) .. 双点 选取当前节点的父节点 
    另外还有starts-with(@属性名称,属性字符相同部分),string(.)两种重要的特殊方法后面将重点讲。

    利用实例讲解XPath的使用:

    from lxml import etree
    html="""
        <!DOCTYPE html>
        <html>
            <head lang="en">
            <title>测试</title>
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
            </head>
            <body>
                <div id="content">
                    <ul id="ul">
                        <li>NO.1</li>
                        <li>NO.2</li>
                        <li>NO.3</li>
                    </ul>
                    <ul id="ul2">
                        <li>one</li>
                        <li>two</li>
                    </ul>
                </div>
                <div id="url">
                    <a href="http:www.58.com" title="58">58</a>
                    <a href="http:www.icnlogs.com" title="cnblog">cnblog</a>
                </div>
            </body>
        </html>
    selector=etree.HTML(html)
    content=selector.xpath('//div[@id="content"]/ul[@id="ul"]/li/text()') #这里使用id属性来定位哪个div和ul被匹配 使用text()获取文本内容
    for i in content:
        print i

    #输出为

    NO.1

    NO.2

    NO.3

    con=selector.xpath('//a/@href') #这里使用//从全文中定位符合条件的a标签,使用“@标签属性”获取a便签的href属性值
    for each in con:
        print each

    #输出结果为:

    http:www.58.com

    http:www.csdn.net

    con=selector.xpath('/html/body/div/a/@title') #使用绝对路径定位a标签的title
    con=selector.xpath('//a/@title') #使用相对路径定位 两者效果是一样的
    print len(con)
    print con[0]con[1]

    #输出结果为:

    2

    58

    cnblog

    from:http://blog.csdn.net/winterto1990/article/details/47903653

  • 相关阅读:
    centos安装python
    【剑指Offer学习】【所有面试题汇总】
    内连接,外链接(左连接、右连接、全连接),交叉连接
    数据库三范式
    聚集索引与非聚集索引
    B树和B+树的区别
    TCP建立连接三次握手和释放连接四次握手
    HTTP协议详解
    常见的HTTP状态码(HTTP Status Code)说明
    归并排序的思想及递归运行步骤详解
  • 原文地址:https://www.cnblogs.com/sthu/p/7791567.html
Copyright © 2011-2022 走看看