最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python爬虫解析库之Xpath高级用法

    正文概述    2020-06-02   412

    Python爬虫解析库之Xpath高级用法

    xpath速度比较快,是爬虫在网页定位中的较优选择,但是很多网页前端代码混乱难以定位,而学习定位也较为不易,这里列出一点编程过程中可能有用的东西。

    试验环境:Python环境,lxml.etree

    试验所使用的html代码

    <!DOCTYPE html>
    <html>
    <head>
        <title>xpath test</title>
    </head>
    <body>
    <div price="99.8">
        <div>
            <ul>
                <li>时间</li>
                <li>地点</li>
                <li>任务</li>
            </ul>
        </div>
        <div id='testid' data-h="first">
            <h2>这里是个小标题</h2>
            <ol>
                <li data="one">1</li>
                <li data="two">2</li>
                <li data="three">3</li>
            </ol>
            <ul>
                <li code="84">84</li>
                <li code="104">104</li>
                <li code="223">223</li>
            </ul>
        </div>
        <div>
            <h3>这里是H3的内容
                <a href="http://www.baidu.com">百度一下</a>
                <ul>
                    <li>test1</li>
                    <li>test2</li>
                </ul>
            </h3>
        </div>
        <div id="go">
            <ul>
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li>7</li>
                <li>8</li>
                <li>9</li>
                <li>10</li>
            </ul>
        </div>
    </div>
    </body>
    </html>

    1、匹配某节点下的所有.//

    //获取文档中所有匹配的节点,.获取当前节点,有的时候我们需要获取当前节点下的所有节点,.//一定要结合.使用//,否则都会获取整个文档的匹配结果.

    2、匹配包含某属性的所有的属性值//@lang

    print tree.xpath('//@code') #匹配所有带有code属性的属性值
    >>['84', '104', '223']

    3、选取若干路径|

    这个符号用于在一个xpath中写多个表达式用,用|分开,每个表达式互不干扰

    print tree.xpath('//div[@id="testid"]/h2/text() | //li[@data]/text()') #多个匹配条件
    >>[u'\u8fd9\u91cc\u662f\u4e2a\u5c0f\u6807\u9898', '1', '2', '3']

    4、 Axes(轴)

    child:选取当前节点的所有子元素

    >>print tree.xpath('//div[@id="testid"]/child::ul/li/text()') #child子节点定位
    >>['84', '104', '223']
    
    >>print tree.xpath('//div[@id="testid"]/child::*') #child::*当前节点的所有子元素
    >>[<Element h2 at 0x21bd148>, <Element ol at 0x21bd108>, <Element ul at 0x21bd0c8>]
    
    >>#定位某节点下为ol的子节点下的所有节点
    >>print tree.xpath('//div[@id="testid"]/child::ol/child::*/text()') 
    >>['1', '2', '3']

    attribute:选取当前节点的所有属性

    >>print tree.xpath('//div/attribute::id') #attribute定位id属性值
    >>['testid', 'go']
    
    >>print tree.xpath('//div[@id="testid"]/attribute::*') #定位当前节点的所有属性
    >>['testid', 'first']

    ancestor:父辈元素 / ancestor-or-self:父辈元素及当前元素

    >>print tree.xpath('//div[@id="testid"]/ancestor::div/@price') #定位父辈div元素的price属性
    >>['99.8']
    
    >>print tree.xpath('//div[@id="testid"]/ancestor::div') #所有父辈div元素
    >>print tree.xpath('//div[@id="testid"]/ancestor-or-self::div') #所有父辈及当前节点div元素
    >>[<Element div at 0x23fc108>]
    >>[<Element div at 0x23fc108>, <Element div at 0x23fc0c8>]

    following :选取文档中当前节点的结束标签之后的所有节点

    #定位testid之后不包含id属性的div标签下所有的li中第一个li的text属性
    >>print tree.xpath('//div[@id="testid"]/following::div[not(@id)]/.//li[1]/text()') 
    >>['test1']

    下载网 » Python爬虫解析库之Xpath高级用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元