• xpath解析:最常用且最便捷高效的一种解析方式


    一、xpath解析原理:

    • 实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中
    • 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获

    二、环境的安装:

    • pip install lxml

    三、如何实例化一个etree对象 from lxml.html import etree

    1、将本地的html文档中的源码数据加载到etree对象中

    etree.parse(filePath)

    2、可以将从互联网上获取的源码数据加载到该对象中

    etree.HTML('page_text')

    3、xpath('xpath表达式')

    四、xpath表达式

    一个斜杠 / 表示的是从根节点开始定位,表示的是一个层级

    两个斜杠 //  表示的是多个层级,可以表示从任意位置开始定位

    属性定位:

    /div[@class="song"]  #表示取到class为song的div,其中@是固定写法
    
    #格式
    tag[@attrName="attrVallue"]

    索引定位:

    //div[@class="song"]/p[3]
    #表示取到class为song的div下的第三个p标签
    #注意:这里的索引是从1开始的

    取文本:

    /text()  #获取的是标签中直系的文本内容
    
    xpath('//div[@class="tang"]//li[5]/a/text()')[0]
    #表示取到class为tang的div下的第五个li标签中的a标签的文本内容,因为类型是列表,需要加上[0]获取到最终的文本
    
    //text()  #获取标签中非直系的文本内容(所有的内容)

    取属性:

    # 格式
    /@attrName
    
    //div[@class="tang"]/img/@src
    #表示获取到class为tang的div下的img标签的src属性

    # 爬取58二手房中的房源信息
    import requests
    from lxml.html import etree
    
    if __name__ == '__main__':
    
        headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
        }
        # 爬取到页面源码数据
        url = 'https://gz.58.com/ershoufang/'
        page_text = requests.get(url=url,headers=headers).text
    
        # 数据解析
        tree = etree.HTML(page_text)
        # 存储的就是li标签对象
        li_list = tree.xpath('//ul[@class="house-list-wrap"]/li')
        fp = open('58.txt','w',encoding='utf-8')
        for li in li_list:
            # 局部解析
            title = li.xpath('./div[2]/h2/a/text()')[0] # .表示解析的源码的参照标签
            print(title)
            fp.write(title+'
    ')
  • 相关阅读:
    CentOS 7中cAdvisor的安装过程
    怎么查看centos版本
    使docker命令不用加sudo的方法
    Linux进程相关函数system,fork,exec函数族的区别
    git pre-commit hook failed 解决办法
    lint-staged 教程
    用webpack将多个scss文件打包成一个css文件
    js连按键盘事件
    vscode快捷键
    vim 操作命令大全
  • 原文地址:https://www.cnblogs.com/nanjo4373977/p/12936973.html
Copyright © 2020-2023  润新知