• xpath


    xpath知识储备

    -1.下载:pip install lxml
    -2.导包:from lxml import etree
    -3.创建etree对象进行指定对象的解析
    -本地:etree=etree.parse('本地文件路径')
    etree.xpath('xpath表达式')
    -网络:etree=etree.parse('网络请求到的页面数据')
    etree.xpath('xpath表达式')

    xpath常用表达式

    - 属性定位:
    找到class属性为song的div标签
    //div[@class="song"]
    - 层级&索引定位
    找到class为tang的div直系子标签下的ul下的第二个li下的a
    //div[class="tang"]/ul/li[2]/a
    - 逻辑定位
    找到href属性为空且class属性为do的a标签
    //a[@href="" and @class="du"]
    - 模糊匹配
    //div[contains(@class, "ng")] 包含
    //div[starts-with(@class,"ta")] 以。。。开头
    - 取文本
    /text() 表示获取某个标签下的文本内容
    //text() 表示获取某个标签下的文本内容和所有子标签的文本内容
    //div[@class="song"]/p[1]/text()
    //div[@class="tang"]//text()
    - 取属性
    //div[@class="tang"]//li[2]/a/@href

    注意: 返回值都是列表

    练习

    • 需求:用xpath对段子网的内容和标题进行解析,持久化存储
    import requests
    from lxml import etree
    
    #1.指定url
    url='https://ishuo.cn/joke/'
    
    #2.发起请求
    # 自定义请求头信息
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
    
    }
    response = requests.get(url,headers=headers)
    #3.获取数据
    page_text=response.text
    #4.解析数据
    tree = etree.HTML(page_text)
    # 获取所有的li标签  返回列表中是element类型对象,可以继续调用xpath对其中的内容进行解析
    li_list = tree.xpath('//div[@id="list"]/ul/li')
    f = open('./段子.txt','w',encoding='utf-8')
    for li in li_list:
        title = li.xpath('./div[@class="info"]/a/text()')[0]
        content = li.xpath('./div[@class="content"]/text()')[0]
        
        #5.持久化存储
        f.write(title+'
       '+content+'
    
    ')
    print('写入完成')

    xpath插件

    可以直接将表达式作用于浏览器当中,测试通过再用到代码中。

     - 安装:更多工具》》拓展程序》》开启开发者模式》》将网上下载的xpath插件拖动到页面
     -打开关闭的快捷键:ctrl+shift+x
  • 相关阅读:
    2018年你需要知道的13个JavaScript工具库
    JavaScript一团乱,这是好事
    5大JavaScript前端框架简介
    大型Vuex应用程序的目录结构
    Github被微软收购,这里整理了16个替代品
    如何使用@vue/cli 3.0在npm上创建,发布和使用你自己的Vue.js组件库
    TensorFlow入门教程
    想成为顶级开发者吗?亲自动手实现经典案例
    2018年最值得关注的30个Vue开源项目
    SQL Server 合并复制遇到identity range check报错的解决 (转载)
  • 原文地址:https://www.cnblogs.com/yuliangkaiyue/p/10001701.html
Copyright © 2020-2023  润新知