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

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))

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的返回值是一个列表类型的数据

# 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.mfbz.cn/a/259668.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

k8s集群核心概念 Pod进阶

k8s集群核心概念 Pod进阶 一、场景 Pod在kubernetes集群中是核心资源对象之一&#xff0c;前期我们已经在《kubernetes极速入门》课程中讲解了Pod创建及Pod删除方法&#xff0c;但是实际企业应用中&#xff0c;Pod使用远比我们想像复杂&#xff0c;本次课程我们接着为大家讲解…

stack刷题

最小栈 最小栈 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部…

C#文件操作(一)

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第20章《文件》 二、操作文件的相关类 在C#应用程序中Syste.IO名称空间包含用于在文件中读写数据的类。在此我列举一下File、Directory、Path、FileInfo、DirectoryInfo、FileSystemInfo、FileSystemWatcher。其中在Syste…

解决Android studio 创建虚拟机时提示a system image must be selected continue问题

在使用android studio的时候&#xff0c;很多新手在创建虚拟机的时候回出现 a system image must be selected continue错误。 里明显是缺少了systemImage,解决方法如下 打开SDK MANAGER,然后把右下角的show package details勾上,把对应的system image下载下来即可

mysql:查看服务端为了处理连接而创建的线程数量

使用命令show global status like Threads_created;可以查看服务端为了处理连接而创建的线程数量。 例如&#xff1a;

5G+云渲染技术:将如何快速推进XR和元宇宙?

XR&#xff08;扩展现实&#xff09;领域正在以惊人的速度增长。目前&#xff0c;到 2024 年&#xff0c;一些专家表示这个行业的价值将达到 3000 亿美元。 这个行业发展如此迅速的部分原因是 XR 将在商业环境中的带来巨大利益。近年来&#xff0c;很多企业遇到了将增强现实和…

【lesson18】MySQL内置函数(1)日期函数和字符串函数

文章目录 日期函数函数使用具体使用案例建表插入数据建表插入数据 字符串函数函数使用具体使用案例建表插入数据测试 日期函数 函数使用 获得年月日&#xff1a; 获得时分秒&#xff1a; 获得时间戳&#xff1a; 获得现在的时间&#xff1a; 在日期的基础上加日期&#xf…

Unity中URP下的半透明效果实现

文章目录 前言一、实现半透明的步骤1、修改Blend模式&#xff0c;使之透明2、打开深度写入&#xff0c;防止透明对象穿模3、在Tags中&#xff0c;修改渲染类型和渲染队列为半透明 Transparent 二、对透明效果实现从下到上的透明渐变1、 我们在 Varying 中&#xff0c;定义一个v…

vue3表格导入导出.xlsx

在这次使用时恰好整出来了&#xff0c;希望大家也能学习到&#xff0c;特此分享出来 使用前确保安装以下模块&#xff0c;最好全局配置element-plus ### 展示一下 ### ###导出选项 ### ###导入de数据 ### 安装的模块 npm install js-table2excel // 安装js-table2excel n…

翻译: LLMs离通用人工智能AGI有多远 20个小时学会开车 Artificial General Intelligence

AGI&#xff0c;即人工通用智能&#xff0c;是一个令人兴奋的概念。我认为围绕它的一些混淆源于“通用”这个词的使用。正如您所知&#xff0c;人工智能是一种通用技术&#xff0c;意味着它对许多不同的事情都有用。大型语言模型的崛起导致了像ChatGPT这样的单一模型可以用于许…

Java发起SOAP请求代码参考

目录 Java发起SOAP请求代码参考 代码1.组装参数2.加密参数3.发起连接4.解析返回数据 参考 文章所属专区 超链接 代码 1.组装参数 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&qu…

AUTOSAR CanTSyn模块配置与代码实现(二)

AUTOSAR CanTSyn模块配置与代码实现 1、FUP message处理 CanTSyn_process_FUP_message 先比较和SYNC报文的Sequence是否相等&#xff0c;如果不相等则不接受该报文。 然后调用CanTSyn_unpack_store_fup处理fup报文。 获取接收到FUP时的本地时间&#xff0c;并与接收到的SYNC…

虚拟机无法进入系统问题

概述 客户在华为云平台上创建了两台虚拟机并部署aarch64 V10 OS&#xff0c;2021-10-28其中一台虚拟机业务出现异常&#xff0c;运维重启虚拟机后系统进不去&#xff0c;左上角光标闪烁&#xff0c;接着重启另一台虚拟机同样起不来&#xff0c;现象一致。 分析 通过分析现场…

天眼销使用指南

刚做销售的你&#xff0c;打电话是不是总是被客户拒决&#xff1f;要不打过去就是空号错号、找不着人&#xff1f;更甚者连客户电话都不知道&#xff1f; 如何快~速找到目标客户准确的联系方式呢&#xff1f;赶紧把这份使用指南请收好&#xff0c;客户不用愁。 1、进入【天眼…

0. Java简介与安装配置

0. Java简介与安装配置 文章目录 0. Java简介与安装配置1.1 Java简介1.2 Java特性1.2 Linux环境安装1.3 Windows环境安装1.3.1 下载JDK安装包1.3.2 安装JDK3. 配置JAVA环境4. 检验安装是否成功 1.3 开发工具参考文献 1.1 Java简介 Java是一门面向对象]编程语言&#xff0c;不仅…

部分常用算法笔记

一、简单易考 1、冒泡排序 https://www.nowcoder.com/practice/2baf799ea0594abd974d37139de27896 for i:0;i<length;i { for j:0;j<length-i-1;j { if array[j] > array[j1] { array[j1],array[j] array[j],array[j1] } } } 2、求数组最大最小值。 1&#xff09;O(…

Hudi 表类型和查询类型

数据湖hudi的表类型定义了数据在DFS上如何组织布局&#xff0c;同时实现一些timeline等操作&#xff08;表类型定定义数据是如何写入的&#xff09;&#xff1b;查询类型则是定义如何读取DFS上的数据。 Table typequery typeCopy-On-Write 快照查询&#xff1b; 增量查询&…

若依系列框架RuoYi(104集),RuoYi-Vue(121集)、RuoYi-Cloud(134集)最新完整视频.txt

若依系列框架RuoYi(104集),RuoYi-Vue&#xff08;121集&#xff09;、RuoYi-Cloud&#xff08;134集&#xff09;最新完整视频.txt

C/C++ BM1反转链表

文章目录 前言题目1.解决方案一1.1 思路阐述1.2 源码 2. 解决方案二2.1 思路阐述2.2 源码 总结 前言 这题是牛客网的BM1&#xff0c;主要涉及到链表的操作以及栈数据结构的使用。 题目 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的…

Arduino开发实例-液体流量测量

液体流量测量 文章目录 液体流量测量1、流量传感器介绍2、硬件准备及接线3、代码实现在本文中,将介绍如何流量传感器进行测量液体流量。 流量传感器用于测量液体流速。 市场上有不同类型的流量传感器,在本文中,我们将使用霍尔效应流量传感器。 这些类型的流量传感器是非侵入…
最新文章