xpath教程一---简单的标签搜索
工具
- 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标签下span、a、p标签里面的值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是换行
- 就任务而言,任务三比任务二还轻松点,能获取
- 任务四:解析
th和td的文本值- 这次
th和td都有两个标签,首先按前面的方式来写路径 - 通过
body,再到table,然后是tr,再是th和td - 最终的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教程一---简单的标签搜索的更多相关文章
- ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 标签助手 上一章节我们介绍了视图导入,学习了 ...
- xpath教程二 ---- 通过ID和Class检索
必备知识点 在html中,id是唯一的 在html中,class是可以多处引用的 工具 Python3版本 lxml库[优点是解析快] HTML代码块[从网络中获取或者自己杜撰一个] requests ...
- python--selenium简单模拟百度搜索点击器
python--selenium简单模拟百度搜索点击器 发布时间:2018-02-28 来源:网络 上传者:用户 关键字: selenium 模拟 简单 点击 搜索 百度 发表文章摘要:用途:简单模拟 ...
- xpath教程 2 - lxml库
xpath教程 2 - lxml库 这些就是XPath的语法内容,在运用到Python抓取时要先转换为xml. lxml库 lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HT ...
- xpath教程三---逐层检索和全局检索
本节主要介绍用xpath来描述html的层级关系 主要使用到的知识点如下: 单独的一个点 .,表示当前位置 两个点 ..,表示上一级父标签的位置 单独的一个斜杠 /,表示只检索下面一级 单独的两个斜杠 ...
- Playmaker全面实践教程之简单的使用Playmaker示例
Playmaker全面实践教程之简单的使用Playmaker示例 简单的使用Playmaker示例 通过本章前面部分的学习,相信读者已经对Playmaker有了一个整体的认识和印象了.在本章的最后,我 ...
- xpath教程 3 - xpath的小结
一.xpath提取内容 1.提取节点中最表层的文本 htmlobj.xpath("./text()") 在scrapy中用extract()[0]方法抽取文本.如: temp['t ...
- 雷林鹏分享:Ruby XML, XSLT 和 XPath 教程
Ruby XML, XSLT 和 XPath 教程 什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种 ...
- ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程
原文:ASP.NET Core 新增用户 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 新增用户 上一章节我们实现了一个注册表单,但也留了一些东西还没完成, ...
随机推荐
- LeetCode: 57. Insert Interval(Hard)
1. 原题链接 https://leetcode.com/problems/insert-interval/description/ 2. 题目要求 该题与上一题的区别在于,插入一个新的interva ...
- 让pip 使用国内镜像源
让python的pip使用 国内镜像 国内源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/py ...
- OpenCV 3.2 FlannBasedMatcher
#include <iostream> #include <string> #include <boost/timer.hpp> #include "op ...
- restTemplate访问接口
后端技术精选 每天推送精选技术好文,涉及Java.python.Linux及MySQL,欢迎关注微信公众号:后端技术精选 随笔 - 52, 文章 - 0, 评论 - 50, 引用 - 0 Spring ...
- JS中String对象常用的方法
1. stringObject.charAt(index) 参数:index 必需,即字符在字符串中的下标. 返回值: 返回在指定位置的字符.返回的字符是长度为 1的字符串.(length属性 ...
- 如何利用Navicat导入/导出mssql中的数据
sqlserver,在第一次使用该软件进行"连接"的时候,会提示安装"Microsoft Sqlsever Navicat Client.",这时直接点击&qu ...
- cf#516A. Make a triangle!(三角形)
http://codeforces.com/contest/1064/problem/A 题意:给出三角形的三条边,问要让他组成三角形需要增加多少长度 题解:规律:如果给出的三条边不能组成三角形,那答 ...
- .net 使用com组件操作word遇到的一些问题
1.警告: 方法“Microsoft.Office.Interop.Word._Document.Close(ref object, ref object, ref object)”和非方法“Micr ...
- C++11 type_traits 之is_convertible源码分析
请看源码: struct __sfinae_types { typedef char __one; typedef ]; } __two; }; template<typename _From, ...
- TW实习日记:第24-25天
项目的交付期是真的赶...一直在不断地修改一些小bug,然后消息推送功能出了一个问题,就是不知道为什么PC端会发送两次消息到移动端后台.其中第一条正常第二条会有乱码不正常,可以说是很奇怪了,一开始都认 ...