XPath入门

xpath语法详解 # 从根节点开始// # 选择匹配的任何位置. # 当前节点.. # 父节点@ # 选择属性[node] # 选取所有node子元素[@attr] # 选取带有attr属性的所有元素。 阅读详情
AI摘要

本文围绕XPath展开,介绍了其语法,包括路径表达式、轴、运算符等,还说明了在浏览器控制台调试XPath定位的步骤与技巧。同时讲解了基础语法、高级用法实战,并给出XPath定位的测试步骤和Python实现。最后总结XPath知识,还推荐了后续可学的XSLT、XQuery等内容。

📝 主旨内容

一、XPath语法


XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。


(一)XML实例文档

我们将在下面的例子中使用这个 XML 文档。

实例

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
        <title lang="eng">Harry Potter</title>
        <price>29.99</price>
    </book>
    <book>
        <title lang="eng">Learning XML</title>
        <price>39.95</price>
    </book>
</bookstore>

  • 选取节点

XPath 使用路径表达式在 XML 文档中选取节点。节点是通过沿着路径或者 step 来选取的。 下面列出了最有用的路径表达式:

表达式描述
nodename选取此节点的所有子节点。
/从根节点选取(取子节点)。
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置(取子孙节点)。
.选取当前节点。
..选取当前节点的父节点。
@选取属性。

在下面的表格中,我们已列出了一些路径表达式以及表达式的结果:

路径表达式结果
bookstore选取所有名为 bookstore 的节点。
/bookstore选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang选取名为 lang 的所有属性。

  • 谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中。

在下面的表格中,我们列出了带有谓语的一些路径表达式,以及表达式的结果:

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]//title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

  • 选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

  • 选取若干路径

通过在路径表达式中使用"|"运算符,您可以选取若干个路径。

在下面的表格中,我们列出了一些路径表达式,以及这些表达式的结果:

路径表达式结果
//book/title//book/price
//title//price
/bookstore/book/title//price

(二)XPath 轴(Axes)


  • XML 实例文档

我们将在下面的例子中使用此 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
        <title lang="en">Harry Potter</title>
        <price>29.99</price>
    </book>
    <book>
        <title lang="en">Learning XML</title>
        <price>39.95</price>
    </book>
</bookstore>

  • XPath 轴(Axes)

轴可定义相对于当前节点的节点集。

轴名称结果
ancestor选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute选取当前节点的所有属性。
child选取当前节点的所有子元素。
descendant选取当前节点的所有后代元素(子、孙等)。
descendant-or-self选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following选取文档中当前节点的结束标签之后的所有节点。
following-sibling选取当前节点之后的所有兄弟节点
namespace选取当前节点的所有命名空间节点。
parent选取当前节点的父节点。
preceding选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling选取当前节点之前的所有同级节点。
self选取当前节点。

(三)XPath运算符


XPath 表达式可返回节点集、字符串、逻辑值以及数字。


  • XPat运算符

下面列出了可用在XPath表达式中的运算符:

运算符描述实例返回值
计算两个节点集//book
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80如果 price 是 9.80,则返回 true。如果 price 是 9.90,则返回 false。
!=不等于price!=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
<小于price<9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。如果 price 是 9.90,则返回 false。
>大于price>9.80如果 price 是 9.90,则返回 true。如果 price 是 9.80,则返回 false。
>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。如果 price 是 9.70,则返回 false。
or或price=9.80 or price=9.70如果 price 是 9.80,则返回 true。如果 price 是 9.50,则返回 false。
and与price>9.00 and price<9.90如果 price 是 9.80,则返回 true。如果 price 是 8.50,则返回 false。
mod计算除法的余数5 mod 21
  • 可维护性更强:XPath相对定位可以相对于其他元素的方式来定位元素。如果页面结构发生变化,只需要更新相对路径中的某些部分,而不必重新创建整个定位表达式。
  • 语法更加简洁:XPath相对路径是相对于其他元素的路径,更容易理解和编写。与复杂的绝对路径相比,相对路径语法更加简洁。
  • 相比于css可以支持更多的方式:XPath相对定位可以访问XML和HTML文档的任何部分,而不仅仅是元素和属性。

示例代码如下:

# 相对路径
//*[@id="ember284"]/td[1]/span/a
# 绝对路径
/html/body/section/div/div[2]/div[2]/div[5]/div[2]/div/div/div[2]/table/tbody/tr[2]/td[1]/span/a

二、XPath定位的调试方式

XPath 是一种在 XML 文档中查找信息的语言,它也被广泛应用于网页爬虫中,用于定位 HTML 文档中的元素。以下是关于使用浏览器控制台(console)调试 XPath 表达式的方法:

(一)浏览器控制台调试 XPath 的步骤:

  1. 打开浏览器开发者工具:

  • 在大多数现代浏览器中,可以通过右键点击页面元素并选择“检查”(或使用快捷键F12,如 Ctrl+Shift+I / Cmd+Option+I)来打开开发者工具。

有些人的浏览器开发者工具可能设置成了英文,右上角三个点选择Settings设置,修改语言为简体中文即可。

  1. 切换到控制台(Console)标签:

    • 在开发者工具中,通常有一个标签或面板叫做“Console”,点击它即可打开控制台。

  1. 使用 $x 函数:

    • 在控制台输入 $x('XPath 表达式'),其中"XPath 表达式"是你想要测试的 XPath 语句。(这里一定要注意确保所有的引号都正确匹配,如果不匹配可能会报错“VM1720:1 Uncaught SyntaxError: missing ) after argument list”之类的语法错误)
    • 按下回车键执行。

  1. 查看结果:

    • 如果XPath表达式正确,控制台将返回一个包含匹配元素的NodeList。
    • 如果没有匹配的元素,将返回一个空数组。
    • 如果XPath表达式有语法错误,控制台将显示错误信息。

(二)调试技巧:

  • 检查表达式:确保XPath表达式正确无误,包括使用正确的轴(例如 child::、descendant::)、节点测试(例如 element()、text())和谓语(例如 [1]、[@id='example'])。
  • 逐步构建:从简单的 XPath 开始,逐步添加条件,直到定位到目标元素。
  • 使用浏览器的元素面板:在元素面板中,你可以右键点击一个元素,选择“Copy”然后“Copy XPath”,这通常会给出一个可以参考的XPath表达式。
  • 注意命名空间:如果文档使用 XML 命名空间,XPath表达式需要正确处理这些命名空间。

示例:

假设你想要找到页面上所有带有 class="example" 的 div 元素,你可以在控制台输入以下命令:

$x("//div[@class='example']")

这将返回所有匹配的 div 元素。如果返回结果不符合预期,你可能需要调整 XPath表达式。 通过以上步骤,你可以有效地调试和优化你的 XPath 表达式,以便在爬虫中正确地定位网页元素。

三、XPath基础语法(包含关系)

这里以测试人社区为例(测试人社区 - 软件测试开发爱好者的交流社区,交流范围涵盖软件测试、自动化测试、UI测试、接口测试、性能测试、安全测试、测试开发、测试平台、开源测试、测试教程、测试面试题、appium、selenium、jmeter、jenkins)%2F),F12进入开发者模式,选择console;

  • 整个页面
$x("/")

  • 整个页面中的唯一根元素
$x("/*")

  • 整个页面中的所有元素
$x("//*")

  • 查找页面上所有的 div 标签节点
$x("//div")

 

  • 查找 id 属性为 site-logo 的节点
$x('//*[@id="site-logo"]')

  • 查找节点的父节点
$x('//*[@id="site-logo"]/..')

 

  • XPath 顺序关系(索引)

XPath 通过索引直接获取对应元素:

# 获取此节点下的所有的li元素
$x("//*[@id='ember15']//li")
# 获取此节点下【所有的节点的】第一个li元素
$x("//*[@id='ember15']//li[1]")

 

四、XPath 高级用法实战

打开测试人社区(测试人社区 - 软件测试开发爱好者的交流社区,交流范围涵盖软件测试、自动化测试、UI测试、接口测试、性能测试、安全测试、测试开发、测试平台、开源测试、测试教程、测试面试题、appium、selenium、jmeter、jenkins)%2F),F12 进入开发者模式。

注意:所有的表达式需要和[]结合。

  • 选取最新的元素

选取最后一个 div 标签

$x("(//div)[last()]")

 

  • 多个属性共同定位-交集

选取属性 id 的值为 ember24 并且属性 class 的值为 nav-item_new new ember-view 的 input 标签

$x("//*[@class='nav-item_new new ember-view' and @id ='ember24']")

 

  • 多属性共同定位-并集

选取属性 id 的值为 ember24 或属性 id 的值为 ember23 的 input 标签

$x("//*[@id='ember23'or@id ='ember24']")

 

  • 文本信息定位

选取所有文本信息为'所有类别'的元素

$x('//*[text()="所有类别"]')

 

  • 文本信息包含定位

选取所有文本信息包'Python 测试开发'的元素

$x('//*[contains(text(),"Python")]'

 

五、Xpath定位-实战

测试步骤

  1. 设置测试环境:
    • 配置日志
    • 启动Chrome浏览器(最大化窗口)
    • 设置隐式等待时间为20秒
  2. 开始测试:
  3. 查找并点击"类别"元素:
    • 尝试使用三个不同的XPath表达式来定位元素: a. "//[@id='ember23'or@id ='ember24']" b. "//[text()='所有类别']" c. "//*[contains(text(),'Python')]"
    • 对每个XPath,使用WebDriverWait等待最多15秒,直到元素可点击
    • 如果找到元素,则点击它
    • 如果所有XPath都失败,抛出NoSuchElementException异常
  4. 等待3秒(使用time.sleep(3))
  5. 结束测试:
    • 如果没有遇到异常,记录"测试通过"
    • 如果遇到异常(TimeoutException, NoSuchElementException, 或其他异常),记录错误并保存屏幕截图
  6. 清理测试环境:
    • 关闭浏览器

这个测试主要是验证能否在网页上找到并点击"类别"元素。它没有进行任何进一步的验证或断言。测试的主要目是检查网页的基本加载情况和特定元素的可用性。

Python 实现

import logging
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException, NoSuchElementException
import time

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

class Test():
    def setup(self):
        logging.info("设置测试环境")
        service = Service()
        options = webdriver.ChromeOptions()
        options.add_argument("--start-maximized")  # 最大化浏览器窗口
        self.driver = webdriver.Chrome(service=service, options=options)
        self.driver.implicitly_wait(20)  # 增加隐式等待时间
        logging.info("浏览器已启动")

    def teardown(self):
        logging.info("清理测试环境")
        self.driver.quit()
        logging.info("浏览器已关闭")

    def test_xpath(self):
        try:
            logging.info("开始测试")
            self.driver.get("<https://www.ceshiren.com>")
            logging.info("已打开测试网页")

            time.sleep(5)  # 增加等待时间

            # 尝试多个可能的XPath
            xpaths = [
                "//*[@id='ember23'or@id ='ember24']",
                "//*[text()='类别']",
                "//*[contains(text(),'Python')]"
            ]

            category_element = None
            for xpath in xpaths:
                try:
                    logging.info(f"尝试使用XPath: {xpath}")
                    category_element = WebDriverWait(self.driver, 15).until(
                        EC.element_to_be_clickable((By.XPATH, xpath))
                    )
                    if category_element:
                        logging.info(f"找到元素,使用的XPath: {xpath}")
                        break
                except:
                    logging.warning(f"未找到元素,XPath: {xpath}")

            if category_element:
                logging.info("'类别'元素已找到,准备点击")
                category_element.click()
                logging.info("已点击'类别'元素")
            else:
                raise NoSuchElementException("无法找到'类别'元素")

            time.sleep(3)  # 给页面反应一些时间

            logging.info("测试通过")

        except TimeoutException:
            logging.error("等待元素超时")
            self.driver.save_screenshot("timeout_error.png")
            raise
        except NoSuchElementException:
            logging.error("未找到指定元素")
            self.driver.save_screenshot("element_not_found.png")
            raise
        except Exception as e:
            logging.error(f"发生未预期的错误: {str(e)}")
            self.driver.save_screenshot("unexpected_error.png")
            raise

if __name__ == "__main__":
    test = Test()
    try:
        test.setup()
        test.test_xpath()
    finally:
        test.teardown()
from lxml import etree

# 示例 HTML 文本
text = '''
<div>
 <ul>
      <li class="item-0"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link1.html>"><span>first item</span></a></li>
      <li class="item-1"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link2.html>">second item</a></li>
      <li class="item-inactive"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link3.html>">third item</a></li>
      <li class="item-1"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link4.html>">fourth item</a></li>
      <li class="item-0"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link5.html>">fifth item</a></li>
  </ul>
</div>
'''
# 构造 XPath 解析对象
html = etree.HTML(text)
# 选择文档中的所有节点
result = html.xpath('//*')
# 打印所有节点
print("选取所有节点:", result)
# 选择所有的 li 节点
result = html.xpath('//li')
# 打印所有 li 节点
print("选取所有li节点:", result)
# 选择所有 li 节点的直接子节点 a
result = html.xpath('//li/a')
# 打印所有 li 节点的直接子节点 a
print("选取所有直接a子节点:", result)
# 选取所有子孙a节点
result = html.xpath('//ul//a')
print("选取所有子孙a节点:", result)
# 获取指定 href 的 a 节点的父节点的 class 属性
result = html.xpath('//a[@href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link4.html>"]/../@class')
# 打印父节点的 class 属性
print("选取特定href的a节点,并获取其父节点的class属性:", result)
# 选择所有 class 属性为 item-0 的 li 节点
result = html.xpath('//li[@class="item-0"]')
# 打印所有 class 属性为 item-0 的 li 节点
print("选取class为item-0的li节点:", result)
# 获取所有 class 属性为 item-0 的 li 节点的子节点 a 的文本
result = html.xpath('//li[@class="item-0"]/a/text()')
# 打印所有 class 属性为 item-0 的 li 节点的子节点 a 的文本
print("获取所有class属性为item-0的li节点的子节点a的文本:", result)
# 获取所有 li 节点的子节点 a 的 href 属性
result = html.xpath('//li/a/@href')
# 打印所有 li 节点的子节点 a 的 href 属性
print("获取所有li节点的子节点a的href属性:", result)
# 选择 class 属性包含 li 的 li 节点
text = '''
<li class="li li-first"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link.html>">first item</a></li>
'''
html = etree.HTML(text)
result = html.xpath('//li[contains(@class, "li")]/a/text()')
# 打印所有 class 属性包含 li 的 li 节点的子节点 a 的文本
print("选择 class 属性包含 li 的 li 节点", result)
# 选择同时满足多个属性的节点
text = '''
<li class="li li-first" name="item"><a href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link.html>">first item</a></li>
'''
html = etree.HTML(text)
result = html.xpath('//li[contains(@class, "li") and @name="item"]/a/text()')
# 打印所有同时满足 class 属性包含 li 和 name 属性为 item 的 li 节点的子节点 a 的文本
print("选择同时满足多个属性的节点", result)
# 10. 按序选择节点
result = html.xpath('//li[1]/a/text()')
# 打印第一个 li 节点的子节点 a 的文本
print("打印第一个 li 节点的子节点 a 的文本", result)
result = html.xpath('//li[last()]/a/text()')
# 打印最后一个 li 节点的子节点 a 的文本
print("打印最后一个 li 节点的子节点 a 的文本", result)
result = html.xpath('//li[position()<3]/a/text()')
# 打印前两个 li 节点的子节点 a 的文本
print("打印前两个 li 节点的子节点 a 的文本", result)
result = html.xpath('//li[last()-2]/a/text()')
# 打印倒数第三个 li 节点的子节点 a 的文本
print("打印倒数第三个 li 节点的子节点 a 的文本", result)
# 使用 XPath 轴选择节点
result = html.xpath('//li[1]/ancestor::*')
# 打印第一个 li 节点的所有祖先节点
print("使用 XPath 轴选择节点", result)
result = html.xpath('//li[1]/ancestor::div')
# 打印第一个 li 节点的 div 祖先节点
print("打印第一个 li 节点的 div 祖先节点", result)
result = html.xpath('//li[1]/attribute::*')
# 打印第一个 li 节点的所有属性
print("打印第一个 li 节点的所有属性", result)
result = html.xpath('//li[1]/child::a[@href="<https://blog.youkuaiyun.com/Gltu_java?spm=1010.2135.3001.5343/link1.html>"]')
# 打印第一个 li 节点的直接子节点 a,且其 href 属性符合条件
print("打印第一个 li 节点的直接子节点 a,且其 href 属性符合条件", result)
result = html.xpath('//li[1]/descendant::span')
# 打印第一个 li 节点的所有子孙节点中的 span 节点
print("打印第一个 li 节点的所有子孙节点中的 span 节点", result)
result = html.xpath('//li[1]/following::*[2]')
# 打印第一个 li 节点后的第二个节点
print("打印第一个 li 节点后的第二个节点", result)
result = html.xpath('//li[1]/following-sibling::*')
# 打印第一个 li 节点后的所有同级节点
print("打印第一个 li 节点后的所有同级节点", result)

🤗 总结归纳

XPath概要

本教程已经讲解了如何在 XML 文档中查找信息。

学习了如何使用 XPath 通过元素和属性在 XML 文档中进行导航。

学习了如何使用 XPath 中内建的某些标准函数。

如需更多有关 XPath 的信息,请阅读《XPath 参考手册》。


已经学习了XPath,下一步应当学习什么呢?

下一步应该学习 XSLT、XQuery、XLink以及XPointer。

  • XSLT

XSLT是针对XML文件的样式表语言。

通过XSLT,您可以把XML文件转换为其他的格式,比如XHTML。

如果希望学习更多有关XSLT的知识,请访问菜鸟教程的《XSLT 教程》。

  • XQuery

XQuery和XML数据查询有关。

XQuery被设计用来查询任何可作为 XML形态呈现的数据,包括数据库。

如果希望学习更多有关XQuery的知识,请访问菜鸟教程的《XQuery 教程》。

  • XLink 和 XPointer

XML中的链接被分为两个部分:XLink和XPointer。

XLink和XPointer定义了在XML文档中创建超级链接的标准方法。

如果希望学习更多有关XLink和XPointer的知识,请访问菜鸟教程的《XLink 教程和 XPointer教程》。

📎 参考文章

xpath语法以及基本使用 xpath过滤xml 阅读详情

相关推荐

XPath详解教程

目录 1. XPath 概览 2. XPath 常用规则 3. 准备工作 4.实例引入 5.所有节点 6. 子节点 7.父节点 8.属性匹配 9.文本获取 10.属性获取 11.属性多值匹配 12. 多属性匹配 13.按序选择 14. 节点轴选择 结语

PY洋洋 2万+

python爬虫之xpath入门

XPATH(XML Path Language),它可以在 XML 和 HTML文档中对元素和属性进行查找和遍历。XPath 使用路径表达式来选取 XML 文档中的节点或节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常类似。使用chrome 插件选择标签时候,选中时,选中的标签会添加属性class=“xh-highlight”

hjc_042043的博客 4721

python3中xpath的使用快速入门

python3中xpath的使用快速入门 python中使用xpath的场景   我们一般是在爬虫中会用到xpath对网页源代码进行信息的筛选与提取,具体而言,主要筛选的信息有以下几种:   1,某个标签中文本的获取     eg:<title>my love</title> 中my love的获取   2,某个标签中属性的获取     eg:<title class=“beautiful”>my love</title> 中class属性的获

shineLikeTheSun的博客 1504

Xpath语法基础

XPath 使用路径表达式在 XML 文档中进行导航XPath 包含一个标准函数库XPath 是 XSLT 中的主要元素XPath 是一个 W3C 标准XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值、日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。关于这些函数,可参考网站文章XPath、XQuery 以及 XSLT 函数 | 菜鸟教程 (runoob.com)

梅花香自苦寒来,宝剑锋从磨砺出。 3634

Python爬虫Xpath语法快速入门教程!

文章目录 1、Xpath介绍 2、Xpath路径表达式 3、结合实例讲解 很多人学习python,不知道从何学起。很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:101677771 1、Xpath介绍 XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素...

Python_sn的博客 1814

XPath入门 Selenium使用Xpath定位

Xpath介绍,语法,节点类型,数据类型,以及Selenium自动化中使用简单的Xpath定位

HONGTester的博客 2299

XPATH基本语法

转发至:https://www.cnblogs.com/wendyw/p/11633588.html#_label0 XPATH基本语法 目录 1.XPATH与自动化之间的关系 2.XPATH简介 3.XPATH术语 4.XPATH语法 5.XPATH轴 6.XPATH运算符 7.用Text构建有效的XPATH 8.用Contains关键字构建有效的XPATH 9.用startwith关键字构建有效的XPATH 回到顶部 1.XPATH与自动化之间的关系 1.XPATH是

mingyqf的博客 2万+

XPath爬虫入门:从豆瓣电影实战开始

本文介绍了XPath语法及其在网页数据提取中的应用。首先讲解了XPath的基本概念,包括节点关系、路径表达式(绝对路径、相对路径)和基础语法(text()、@属性选择等)。然后详细说明了节点修饰语法,如通过属性值、下标等筛选特定节点。文章还演示了如何使用lxml模块解析HTML,通过etree.HTML()和xpath()方法提取数据,并提供了三种不同的数据提取方法示例。最后比较了底层解析库lxml.etree与高层工具parsel的特点,前者提供完整的DOM操作,后者则更专注于爬虫场景的数据抽取。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 2197

python xpath入门_xpath 的使用

有问题请在博客下留言或加作者微信:tinghai87605025或 QQ :87605025python QQ交流群:py_data483766429一、xpath 浅谈1.1 xpath 是什么?给某些规律信息找通用表达式,我们首先想到的是正则,然而,对于大部分的我们正则用的是不好的,如果用来处理HTML文档是很累,那么有没有其他的方法?答案是肯定的,有!那就是XPath,我们可以先将网络获...

weixin_31865445的博客 480

SUMO使用教程(一)

本人的sumo视频入门课程,希望支持哦。https://edu.youkuaiyun.com/course/detail/25834 SUMO是一款交通仿真软件,其余可自行百度。教程一主要展示一下如何运行一个仿真实例。当然,这只是实现方法中的一种。 准备: 1.SUMO软件 2.osm地图文件 SUMO可去官网下载,解压后就可以使用,图形界面软是在解压后bin文件夹下的sumo-gui.exe。...

lyx的专栏 3万+

fluent二维叶型仿真_Fluent案例4【自然对流】

自然对流来了!!江苏的高校好多开学了,我啥时候才能开学另外,刚才看了何同学的Mac Pro深度体验视频,我好酸/(ㄒoㄒ)/~~好想拥有一台跑仿真那种sou~sou~sou~的机器。废话不多说了,进入正题!案例题目:一个矩形空腔内有500K恒温小球,矩形空腔充斥空气,边界条件绝热,模型尺寸如下,试模拟空腔内空气流动状态做出温度变化图。(尺寸大小懒得写了,在建模部分里有)操作平台:workbench...

weixin_39724469的博客 3670

Xpath入门

入门教程: W3school之XML部分 www.spbeen.com

pikaqiu123321123的博客 476

基于FMCW技术的毫米波雷达测速原理与应用

调频连续波(FMCW)技术是毫米波雷达中实现高精度测速的核心方法之一。本文详细介绍了FMCW测速的基本原理、信号处理流程以及在实际应用中的关键技术。通过分析FMCW雷达的多普勒效应和频率差测量方法,本文展示了如何利用FMCW技术实现目标速度的高精度检测。此外,本文还探讨了FMCW测速在自动驾驶、智能交通和工业自动化等领域的应用案例,为毫米波雷达开发者提供了理论支持和实践指导。

不谈枯燥公式,只聊雷达趋势。用大白话解读毫米波里的黑科技。 1137

xpath入门小知识

归纳一些xpath入门小知识,看完基本就差不多懂了

Mac1392415的博客 535

【Python】秋招机考 —— 2025/9/17 华为 AI 方向

秋招机考,华为 AI,使用 Python 完成编程。

一杯水果茶!足矣~ 1164

简谈基于FPGA的千兆以太网设计

简谈基于FPGA的千兆以太网设计 今天给大侠带来简谈基于FPGA的千兆以太网设计,话不多说,上货。 今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较高级的内容了,有些大侠肯定会感觉以太网学习起来非常不容易。其实,我可以告诉大家,前期学习的基础打扎实了,后期的学习也没那么难。总之就是说难没那么难,说容易也不是那么容易。那么,言归正传,下面让我们一起来聊一聊以太网的学习。 说起以太网,大家可能就会想到百兆以太网、千兆以太网以及万兆以太网等等。局域以太网从10M开始发展,经历几多的变迁,发展到现

3619

python xpath入门_python - XPath 入门语法

//input[@name='log']//input[@id='user_login']//a[@title='Powered by WordPress']//input[@class='input'][@name='log']//input[@class='input' OR @name='log']//input[@class='input' and @name='log']//a[@id=...

weixin_39633500的博客 92

原理和代码解读:用Diffusion Models高清图像修复(Image Inpainting)

在最近的Diffusion Models应用中,Image Inpainting+ControlNet/Lora等工作在模特衣服生成、家居场景重建等场景中得到了广泛的应用。这篇博客主要介绍Diffusion Models如何在修复高清图像的。

沉迷单车的追风少年 2497

XPath 入门到精通:用爬虫实战快速掌握数据提取技巧

XPath 是一种在 XML/HTML 文档中定位元素的语言,爬虫用它来 “精准抓取” 网页数据。:如果把网页比作图书馆,XPath 就是 “找书指南”,能快速定位到你想要的 “数据书籍”。

incidite的博客 1924

大数据领域存算分离:教育行业的数据应用探索

在当今数字化时代,教育行业积累了海量的数据,如学生的学习记录、考试成绩、在线学习行为等。如何高效地存储、管理和分析这些数据,以挖掘其潜在价值,为教育决策、教学改进和学生个性化发展提供支持,成为教育行业面临的重要挑战。大数据领域的存算分离技术为解决这一问题提供了新的思路和方法。本文旨在探索存算分离技术在教育行业的数据应用,分析其原理、优势和实际应用场景,为教育行业的数据管理和分析提供参考。本文共分为十个部分。第一部分介绍背景,包括目的和范围、预期读者、文档结构概述和术语表;

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 812

Python 爬虫 + 数据分析:社会调查数据抓取与结果可视化分析

在当今数字化时代,数据已成为推动社会发展的关键资源之一。无论是市场调研、学术研究还是政策制定,社会调查数据都扮演着至关重要的角色。通过 Python 爬虫技术,我们可以高效地获取这些数据,并结合数据分析与可视化工具,深入挖掘数据背后的价值。本文将通过一个完整的实战项目,带你掌握如何使用 Python 爬虫抓取社会调查数据,并进行可视化分析。

yansideyucsdn的博客 126

用xpath方法解析数据入门实例

前言: 上一篇文章讲到了三种方法来解析数据,分别是正则表达式、Bs4还有xpath,这三种方法各有特点,也都有各自的应用场景,不过xpath可以说是较为常用的了。这一篇就来简单介绍一下xpath方法的入门实例。 正文: 代码实例: # 首先需要安装lxml # pip install lxml # xpath相当于路径,在xml中根据父子关系进行查找 from lxml import etree xml = ''' <book> <id>1&...

weixin_51043896的博客 506

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

python xpath入门_python爬虫入门实战(三)!xpath 和 csv!

最近有小伙伴说正则表达式学不懂?那有什么替代方案呢?一起往下看吧!在前两篇文章我们已经学了一些基本技巧。但是之前都是用正则表达式来解析内容的,可能有小伙伴对正则表达式不理解,于是乎,我找到一个相对好用的库来帮助我们解析内容。配置环境pyhton3 + requests 库 + lxml 库。在国内安装可能会卡住,可以参考以下指令,使用国内镜像。pip3 install lxml -i http:/...

weixin_39812186的博客 116

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

XPath 语法入门

通过本文的学习,你应该掌握了 XPath 的基本语法和核心概念,包括节点选择、轴、谓词、属性选择以及函数的使用。这些知识将帮助你高效地处理 XML 文档或提取网页数据。如果你希望进一步深入学习,可以尝试结合实际项目进行练习,例如在自动化测试中编写更复杂的 XPath 表达式。参考资料。

2401_89793006的博客 1364

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: 亚马逊AI编程工具Amazon Q 和 Amazon CodeWhisperer使用教程
下一篇: 使用Git生成SSH密钥教程(附Git常用命令)
冰万森
博客等级 码龄5年 1万+粉丝 36原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值