测试中,使用xpath对返回的数据进行数据解析

  • 环境安装:pip install lxml
  • xpath解析的编码流程
    • 创建一个etree类型的对象,然后把即将被解析的页面源码数据加载到该对象中
    • 调用etree对象的xpath方法结合着不同形式的xpath表达式,进行标签定位和数据提取
  • xpath表达式如何理解?
    • html中的标签是遵从树状结构的。
    • xpath表达式中不可以出现tbody标签,如果有直接将其删除跨过即可!
    • from lxml import etree
      fp=open('test.html','r')
      tree=etree.parse(fp)
      
      #xpath返回的一定是列表,列表中存储的是定位到的标签对象
      title_tag=tree.xpath('/html/head/title')
      title_tag=tree.xpath('html//title')
      title_tag=tree.xpath('//head/title')
      title_tag=tree.xpath('//title')
      #最左侧为/:表示必须从树的根标签(html标签)开始进行定位
      #最左侧为//:可以从任意位置进行标签的相对位置定位
      #非最左侧的/:表示一个层级
      #非最左侧的//:表示多个层级
      tag=tree.xpath("//div")#定位所有的div标签
      #属性定位
      tag=tree.xpath('//div[@class="song"]')#定位class属性值为song的div标签
      #索引定位:索引是从1开始的
      tag= tree.xpath('//div[@class="tang"]/ul/li[3]')#定位到第三个li标签
      #获取定位到标签中的文本内容
      tag=tree.xpath('//div[@class="song"]/p[3]/text()')
      #获取定位到标签中的属性值://tag/@attrName
      tag=tree.xpath('//img/@src')
      print(tag)
    • 案例获取热门城市和全部城市的名称:

    • from lxml import etree
      import requests
      
      headers={
       'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36'
      }
      
      url='https://www.aqistudy.cn/historydata/'
      page_text=requests.get(url=url,headers=headers,verify=False).text
      tree=etree.HTML(page_text)
      #解析热门城市
      hot_li_list=tree.xpath('//div[@class="bottom"]/ul/li')
      for li in hot_li_list:
          city_name=li.xpath('./a/text()')[0]
          print(city_name)
      #解析全部城市
      all_li_list=tree.xpath('//div[@class="bottom"]/ul/div[2]/li')
      for li in all_li_list:
          city_name=li.xpath('./a/text()')[0]
          print(city_name)

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值