zoukankan      html  css  js  c++  java
  • Python——XPath使用

    一:XPath介绍

    XPath全称XML路径语言,用于确定XML文档中某部分位置。XPath基于XML树状结构,在树中寻找结点。

    现在,一般使用XPath在XML中查找、提取信息,同时,它也支持HTML。所以,我们可以用XPath取代正则表达式来提取信息。

    XPath通过元素以及属性进行导航。

    二:XPath使用大概步骤

    1:安装lxml模块

    2:导入树形结构

    from lxml import etree

    3:把requests抓取的网页转化为树形结构

    selector=etree.HTML(网页源码)

    4:从树形结构中查找信息

    selector.xpath(查找条件)

    三:实战

    Xpath提取内容:

    手动分析法:右键网页—>审查元素—>点击左侧的树结构,逐层展开找到自己需要抓取的内容,这个逐层元素标签构成的路径就是目标元素的路径

    谷歌浏览器生成法::右键网页—>审查元素—>点击左侧的树结构,逐层展开找到自己需要抓取的内容—>右键目标元素弹出菜单,选择“copy xpath”,即可获取目标元素的路径

    观察可知,XPath提取内容的规律:

    //  定位根节点

    /   进入下一层

    /text()  获取当前层文本内容

    /@XXX   获取XXX属性值

    #coding:utf8
    from lxml import etree
    import requests
    
    #连接到网页获取源码
    html=requests.get("http://www.74xw.com/")
    html.encoding='utf-8'
    str=html.text
    #转为树形结构
    selector=etree.HTML(str)
    #使用xpath提取内容
    titles=selector.xpath("/html/body/div[2]/div[1]/div[2]/div/a/@title")
    for title in titles:
        print title

    四:特殊情况处理

    相同字符开头的标签如何处理?

    使用start-with(@属性名,属性值中开头相同的部分)

    content=html.xpath("//div[start-with(@id,"class-")]/text()")

    标签嵌套标签如何处理?

    使用先抓大,再抓小的法则以及string(.):

    data=html.xpath("//大标签")[0] #抓大
    info=data.xpath('string(.)')  #抓小(含
    与空格)
    str=info.replace('
    ','').replace(' ','') #把
     与 空格 处理掉
    print str
  • 相关阅读:
    《Unity3d-控制枪口的朝向代码》
    《Unity3D-鱼的方向 鱼的游动 控制代码》
    《unity3d-随机设置一个物体的scale的方法》
    《Unity3d-在地图中随机生成一个物体的代码》
    《Unity3D-控制检测碰撞以后触发的事件之敌人的攻击行为》
    《Unity3D-播放被打中的时候粒子的特效的代码》
    《Unity3D-敌人血条或者玩家血条控制的代码》
    《Unity3D-自动寻路功能的实现》
    Unity 行首不出现中文标点
    Unity 多级下拉菜单
  • 原文地址:https://www.cnblogs.com/ygj0930/p/7026261.html
Copyright © 2011-2022 走看看