Python爬虫---解析---xpath

news/2024/7/19 12:44:50 标签: python, 爬虫, 开发语言

1.1  安装xpath: 点击安装Xpath 

1.2  将安装好的程序解压,打开浏览器,找到程序扩展,把解压好的程序托进来,如下图所示:

1.3  设置快捷键:打开/关闭xpath

1.4  成功后的图例:按刚刚设置的快捷键 ctrl+shift+x

使用例子 : 在QUERY里输入xpath语法(下文有讲解),RESULTS (1)可以校验是否正确

 

2.1 安装 lxml 库:pip install lxml -i https://pypi.douban.com/simple 

注意:需要安装在python解释器相同的位置

2.2  导入:from lxml import etree

2.3  使用

1.路查询:   1)//: 查找所有子孙节点,不考虑层级关系  2) / : 找直接子节点
2.谓词查询: 1)//div[@id]   2)//div[@id="idname"]
3.属性查询: 1)//@class
4.模糊查询: 1)//div[contains(@id,"he")]   2)//div[starts-with(@id,"he")] I
5.内容查询: 1)//div/h1/text()
6.逻辑运算   1)//div[@id="idname”and @class="classname"] 与  2)//title| //price  或

1)xpath解析本地文件    # etree.parse("xx.html)
2)xpath解析服务器响应的数据  # etree.HTML(response.read().decode("utf-8))

python">from lxml import etree

# xpath解析
# 1)本地文件    # etree.parse("xx.html)
# 2)服务器响应的数据 response.read().decode("utf-8")  # etree.HTML(response.read().decode("utf-8))

# xpath解析本地文件
tree = etree.parse("1218-解析-xpath的基本使用.html")
print(tree)

# xpath基本语法:tree.xpath("xpath路径")
li_list = tree.xpath("//ul/li")  # 查找ul下面的li  子节点
li_list1 = tree.xpath("//body//li")  # 查找body下面的li  子孙节点
li_list2 = tree.xpath("//ul/li[@id]")  # 查找所有有id的属性的li标签
li_list3 = tree.xpath("//ul/li[@id]/text()")  # 查找所有有id的属性的li标签文本
li_list4 = tree.xpath("//ul/li[@id='l1']/text()")  # 查找所有有id为l1的属性的li标签文本
li_list5 = tree.xpath("//ul/li[@id='l1']/@class")  # 查找到id为l1的li标签的class的属性值
li_list6 = tree.xpath("//ul/li[contains(@id,'l')]/text()")  # 查询包含l的li标签
li_list7 = tree.xpath("//ul/li[starts-with(@id,'l')]/text()")  # 查询id的值以l开头的li标签
li_list8 = tree.xpath("//ul/li[@id='l1' and @class='c1']/text()")    # 查询id为l1和class为c1的标签
li_list9 = tree.xpath("//ul/li[@id='l1']/text() | //ul/li[@id='l2']/text()")  # 查询id为l1或id为l2的标签
# li_list9 = tree.xpath("//ul/li[@id='l1' | @id='l2']/text()")   # 不能这样写
print(li_list9)

# 判断列表的长度
print(len(li_list))

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Document</title>
</head>
<body>
    <ul>
        <li id="l1" class="c1">北京</li>
        <li id="l2">上海</li>
        <li id="c3">深圳</li>
        <li id="c4">武汉</li>
    </ul>
    <ul>
        <li>大连</li>
        <li>锦州</li>
        <li>沈阳</li>
    </ul>
</body>
</html>

例子:获取百度网站的 “百度一下” 四个字

注:xpath的返回值是一个列表类型的数据

python"># 1)获取网页的源码
# 2)解析服务器响应的文件
# 3)打印

import urllib.request
from lxml import etree

url = "https://www.baidu.com"

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
# 请求对象的定制
request = urllib.request.Request(url=url,headers=headers)
# 模拟浏览器向服务器发起请求
response = urllib.request.urlopen(request)
# 获取响应数据
content = response.read().decode("utf-8")
# print(content)

# 解析网页源码,获取数据

# 解析服务器响应的文件
tree = etree.HTML(content)

# 获取想要的数据  xpath的返回值是一个列表类型的数据
result= tree.xpath("//input[@id='su']/@value")[0]
print(result)   # 百度一下


http://www.niftyadmin.cn/n/5279433.html

相关文章

Dubbo的学习笔记

目录 架构 zookeeper的简单介绍 简单案例 Dubbo-admin的简单使用 Dubbo高级特性 序列化 地址缓存 超时与重试 多版本 负载均衡 集群容错 服务降级 Dubbo是阿里巴巴开源的一个高性能、轻量级RPC框架 架构 provider&#xff1a;暴露服务的服务提供方container&#x…

【湖仓一体尝试】MYSQL和HIVE数据联合查询

爬了两天大大小小的一堆坑&#xff0c;今天把一个简单的单机环境的流程走通了&#xff0c;记录一笔。 先来个完工环境照&#xff1a; mysqlhadoophiveflinkicebergtrino 得益于IBM OPENJ9的优化&#xff0c;完全启动后的内存占用&#xff1a; 1&#xff09;执行联合查询后的…

快速学习 webpack

目录 1. webpack基本概念 webpack能做什么&#xff1f; 2. webpack的使用步骤 2.1_webpack 更新打包 3. webpack的配置 3.1_打包流程图 3.2_案例-webpack隔行变色 3.3_插件-自动生成html文件 3.4_加载器 - 处理css文件问题 3.5_加载器 - 处理css文件 3.6_加载器 - 处…

7. 行为模式 - 状态模式

亦称&#xff1a; State 意图 状态模式是一种行为设计模式&#xff0c; 让你能在一个对象的内部状态变化时改变其行为&#xff0c; 使其看上去就像改变了自身所属的类一样。 问题 状态模式与有限状态机 的概念紧密相关。 有限状态机。 其主要思想是程序在任意时刻仅可处于几…

scrapy_redis原理分析并实现断点续爬以及分布式爬虫

scrapy_redis原理分析并实现断点续爬以及分布式爬虫 学习目标 了解 scrapy实现去重的原理了解 scrapy中请求入队的条件掌握 scrapy_redis基于url地址的增量式单机爬虫掌握 scrapy_redis分布式爬虫 1. 下载github的demo代码 clone github scrapy-redis源码文件 git clone http…

什么是Amazon Bedrock (亚马逊云的生成式 AI产品)

在百模大战中&#xff0c;AI行业的发展正在经历前所未有的变革。这场竞争不仅推动了AI技术的快速发展&#xff0c;也揭示了AI行业的新趋势。这些趋势不仅影响着我们如何看待和使用AI&#xff0c;也预示着AI未来的发展方向。在这个快速发展的领域&#xff0c;了解这些新趋势对于…

如何在Go中发起HTTP请求

引言 当一个程序需要与另一个程序通信时,许多开发人员会使用HTTP。Go的优势之一是其标准库的广度,HTTP也不例外。Go net/http包不仅支持[创建HTTP服务器],而且它还可以作为客户端进行HTTP请求。 在本教程中,您将创建一个程序,向HTTP服务器发出几种类型的HTTP请求。首先,…

057:vue组件方法中加载匿名函数

第057个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…