工具

  • Python3版本
  • lxml库【优点是解析快】
  • HTML代码块【从网络中获取或者自己杜撰一个】
  • requests【推荐安装,从网页上获取网页代码练手,再好不过了】

讲解

网页代码都是成对的标签,基础结构如下

<!DOCTYPE html>
<html lang="en">
<head>
<!--网页头部信息-->
<title>网页名</title>
</head>
<body>
<!--下面是网页正文-->
<div>
div-text
</div>
</body>
</html>
  • 最外部肯定是html,所有的html代码基本都是放这里面
  • html内部分两块,一块是头head,另一块是身体body
  • head部主要是放网页名、一些申明、和SEO优化的东西
  • body部分就是浏览器显示的内容

网页结构基本都是如此,一般有价值的数据都是在body中

现在开始学习Xpath

  • 第一步:杜撰一个HTML代码块
html_str = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页名</title>
</head>
<body>
<div>
div-text
<span>span-text</span>
<a>a-text</a>
<p>p-text</p>
</div>
<table>
<tr>
<th>Heading</th>
<th>Another Heading</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
table-text-2
</table>
</body>
</html>
"""
  • 第二步:检测Python和lxml库
from lxml import etree
html = etree.HTML(html_str)

这段代码是从lxml中导入etree,然后将前面杜撰的一个html_str字符串通过etree.HTML函数,解析成支持xpath的数据类型,并保存到html变量中

两段代码链接起来,成功运行,那就说明lxml库正常

下面就到了写 xpath 路径的时候了

  • 任务一:解析出head里面的title标签的值【即 ‘网页名’】

    • 获取网页名的值,是使用title/text()来获得,
    • title标签是head的子级
    • head标签就是最外部的标签
    • 所以整个的xpath路径是head/title/text()
    • 最后的python代码就是print(html.xpath('head/title/text()'))。这样就打印出了一个列表['网页名']
  • 任务二:解析出div标签下spanap标签里面的值

    • span标签值对应的xpath路径是body/div/span/text(),结果['span-text']
    • a标签值对应的xpath路径是body/div/a/text(),结果['a-text']
    • p标签值对应的xpath路径是body/div/p/text(),结果['p-text']
  • 任务三:试着解析div标签的text()

    • 就任务而言,任务三比任务二还轻松点,能获取div的子级标签值,获取父级也挺简单
    • div对应的xpath路径是body/div/text()
    • 得到的结果是这样的['\n div-text\n ', '\n ', '\n ', '\n ']
    • 这里必须对结果好好解释下。首先是div里面有三个子级标签,这三个都不算做text()。如果没有子级,得到的结果列表就是一个元素;有两个子级,则列表有三元素;就像一根面条被切了两次,就有三根面条出现。【不是对着切(ˉ▽ ̄~) ~~】
    • 另外 /n是换行
  • 任务四:解析thtd的文本值
    • 这次thtd都有两个标签,首先按前面的方式来写路径
    • 通过body,再到table,然后是tr,再是thtd
    • 最终的xpath是body/table/tr/th/text()body/table/tr/td/text()
    • 运行结果['Heading', 'Another Heading']['row 1, cell 1', 'row 1, cell 2']

最终的代码和运行截图

html_str = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>网页名</title>
</head>
<body>
<div>
div-text
<span>span-text</span>
<a>a-text</a>
<p>p-text</p>
</div>
<table class="2">
<tr>
<th>Heading</th>
<th>Another Heading</th>
</tr>
<tr>
<td>row 1, cell 1</td>
<td>row 1, cell 2</td>
</tr>
table-text-2
</table>
</body>
</html>
""" from lxml import etree html = etree.HTML(html_str)
print(html.xpath('head/title/text()'))
print(html.xpath('body/div/span/text()'))
print(html.xpath('body/div/a/text()'))
print(html.xpath('body/div/p/text()'))
print(html.xpath('body/div/text()'))
print(html.xpath('body/table/tr/th/text()'))
print(html.xpath('body/table/tr/td/text()'))

版权声明:允许转载,转载请注明出处 —— 《xpath教程》: 简单的标签搜索

xpath教程一---简单的标签搜索的更多相关文章

  1. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...

  2. xpath教程二 ---- 通过ID和Class检索

    必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自己杜撰一个] requests ...

  3. python--selenium简单模拟百度搜索点击器

    python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...

  4. xpath教程 2 - lxml库

    xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...

  5. xpath教程三---逐层检索和全局检索

    本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个斜杠 /,表示只检索下面一级 单独的两个斜杠 ...

  6. Playmaker全面实践教程之简单的使用Playmaker示例

    Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...

  7. xpath教程 3 - xpath的小结

    一.xpath提取内容 1.提取节点中最表层的文本 htmlobj.xpath("./text()") 在scrapy中用extract()[0]方法抽取文本.如: temp['t ...

  8. 雷林鹏分享:Ruby XML, XSLT 和 XPath 教程

    Ruby XML, XSLT 和 XPath 教程 什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种 ...

  9. ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...

随机推荐

  1. Hive(8)-常用查询函数

    一. 空字段赋值 1. 函数说明 NVL:给值为NULL的数据赋值,它的格式是NVL( value,default_value).它的功能是如果value为NULL,则NVL函数返回default_v ...

  2. hiveserver2不能启动

    我的hiveserver2一直不能启动,命令行一直卡住不动,然后我就想是不是配置文件没有配置相关的参数,然后就来修改hive-site.xml 最终修改完后的hive-site.xml: <?x ...

  3. 第九篇:S3C2400时钟体系

    S3C2400时钟体系 S3C2400时钟配置流程 该学习板使用了外部晶振12Mhz 晶振--->经过MPLL(锁相环) --->(倍频得到)FCLK--->(对FCLK分频得到)H ...

  4. 『Python基础-5』数字,运算,转换

    『Python基础-5』数字,运算,转换 目录 基本的数字类型 二进制,八进制,十六进制 数字类型间的转换 数字运算 1. 数字类型 Python 数字数据类型用于存储数学上的值,比如整数.浮点数.复 ...

  5. NoSQL入门第四天——事务与主从复制

    一.Redis的事务 1.是什么 可以一次执行多个命令,本质是一组命令的集合.一个事务中的 所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞 (更多请参见官网事务介绍) 2.能干什 ...

  6. c++动态库封装及调用(2、windows下动态库创建)

    DLL即动态链接库(Dynamic-Link Libaray)的缩写,相当于Linux下的共享对象.Windows系统中大量采用了DLL机制,甚至内核的结构很大程度依赖与DLL机制.Windows下的 ...

  7. 全球订单最多的成都优步推出"南北通勤线"业务

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. dsp6657的串口学习

    1. 打算用dsp6657学习下,先用串口实验吧.找一下芯片支持库Chip support libraries,路径D:\ti\pdk_C6657_1_1_1_4\packages\ti\csl,新建 ...

  9. getSteam

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  10. TraceHelper

    public class TraceHelper { private static TraceHelper _traceHelper; private TraceHelper() { } public ...