【Python爬虫】使用etree进行XPath解析

【Python爬虫】使用etree进行XPath解析

文章目录

  • 【Python爬虫】使用etree进行XPath解析
    • 一、相关知识
      • etree的使用
        • 编码流程
        • 环境安装
        • 实例化etree对象
      • XPath语法
    • 二、实例 - 爬取全国城市名称
      • 网页分析
        • 背景介绍
        • 页面分析
      • 代码

一、相关知识

etree的使用

编码流程

  1. 将HTML文本加载到etree对象中
  2. 调用etree的xpath()函数完成标签定位
  3. 对标签为所欲为(此时获得的标签其实是xpath()函数返回的对象)

环境安装

pip install lxml

实例化etree对象

# 首先导入模块
from lxml import etree
  1. 从本地加载HTML
    filePath = '你的HTML文件路径'
    tree = etree.parse(filePath)
    
  2. 从响应数据加载HTML
    url = '某个网址'
    respose = requests.get(url)
    tree = etree.HTML(respose.text)
    

XPath语法

XPath相关知识详见:https://www.runoob.com/xpath/xpath-syntax.html

注:

  • /text()获取的是标签直系文本
  • //text()获取的是标签下所有文本

二、实例 - 爬取全国城市名称

网页分析

背景介绍

要爬取的网站:https://www.aqistudy.cn/historydata/
这是个提供城市pm2.5相关数据的网站,可以看到我们想要的城市名都在下面啦【Python爬虫】使用etree进行XPath解析_第1张图片

页面分析

网站结构还是非常清晰的,每个首字母对应的所有城市在一个

    标签中
    【Python爬虫】使用etree进行XPath解析_第2张图片
    所以目标就很明确了,定位到每个城市对应的标签,获取标签文本即可
    【Python爬虫】使用etree进行XPath解析_第3张图片
    先定位
      标签,发现热门城市和全部城市下面的
        class属性是相同的,顺着父节点往上找,,,思路如下

        1. 相同
        2. 相同
        3. 不同!

        于是我们可以这样写xpath://div[@class='all']//ul
        【Python爬虫】使用etree进行XPath解析_第4张图片

        当然定位方式有多种,大家可以ctrl+F输入xpath来测试语句是否正确,比如
        【Python爬虫】使用etree进行XPath解析_第5张图片

        代码

        代码非常简单,就不多解释啦

        from lxml import etree
        import requests
        
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'
        }
        url = 'https://www.aqistudy.cn/historydata/'
        res = requests.get(url=url, headers=headers)
        
        # 将相应数据加载到etree对象
        tree = etree.HTML(res.text)
        # 获取每个首字母开头的所有城市的
          标签 ul_list = tree.xpath("//div[@class='all']//ul") # 循环每一个
            标签,并添加到city_list列表中 city_list = [] for ul in ul_list: city_list += ul.xpath('.//a/text()') # 输出结果 print(city_list)

        》输出 》
        【Python爬虫】使用etree进行XPath解析_第6张图片

你可能感兴趣的:(爬虫,python,爬虫)