一 xpath介绍
XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。
XPath 使用路径表达式在 XML 文档中进行导航
XPath 包含一个标准函数库
XPath 是 XSLT 中的主要元素
XPath 是一个 W3C 标准
二 xpath 术语
概念
解释
举例
基本值(或称原子值,Atomic value)
基本值是无父或无子的节点
J K. Rowling,"en"
项目(Item)
项目是基本值或者节点
节点关系-父(Parent)
每个元素以及属性都有一个父。
在上面的例子中,book 元素是 title、author、year 以及 price 元素的父:
节点关系-子(Children)
元素节点可有零个、一个或多个子。
在上面的例子中,title、author、year 以及 price 元素都是 book 元素的子:
节点关系-同胞(Sibling)
拥有相同的父的节点。
在上面的例子中,title、author、year 以及 price 元素都是同胞:
节点关系-先辈(Ancestor)
某节点的父、父的父,等等。
在上面的例子中,title 元素的先辈是 book 元素和 bookstore 元素。
后代(Descendant)
某个节点的子,子的子,等等。
在上面的例子中,bookstore 的后代是 book、title、author、year 以及 price 元素。
三 xpath术语
表达式
描述
nodename
选取此节点的所有子节点。
/
从根节点选取。
//
从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
.
选取当前节点。
..
选取当前节点的父节点。
@
选取属性。
四 助力理解
路径表达式
结果
bookstore
选取 bookstore 元素的所有子节点。
/bookstore
选取根元素 bookstore。注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book
选取属于 bookstore 的子元素的所有 book 元素。
//book
选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book
选择属于 bookstore 元素的后代的所有 book 元素,而不管它们位于 bookstore 之下的什么位置。
//@lang
选取名为 lang 的所有属性。
路径表达式
结果
/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。
五 xapth解析数据实例----(二手房价)
'''
xpath数据解析流程:
1.pip install lxml
2.导包:from lxml import etree
3.实例化一个etree对象(将页面数据加载到该对象)
4.调用etree中的xpath函数结合着xpath表达式进行数据解析操作
'''
1 url
2 请求头
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36'
}
3 获取页面数据
page_text=requests.get(url=url,headers=headers).text
4 使用xpath解析数据
#1 实例化etree对象
tree=etree.HTML(page_text)
#2 写表达式定位到需要获取的房价信息
li_list=tree.xpath('//ul[@class="house-list-wrap"]/li') #获取房价的页面所有的li标签
fp=open('fangjia.txt','w',encoding='utf8')
for li in li_list:
title=li.xpath('./div[@class="list-info"]/h2/a/text()')[0] #获取房价描述的title
price=li.xpath('./div[@class="price"]/p[@class="sum"]//text()')#获取房价描述的price
price="".join(price)
fp.write('\n'+title+":"+price)
fp.close()
注意:
xpath 解析的数据的返回值是一个列表.
完整代码
import requests
from lxml import etree
url=f'https://bj.58.com/ershoufang/pn1/'
headers={
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.20 Safari/537.36'
}
page_text=requests.get(url=url,headers=headers).text
#实例化etree对象
tree=etree.HTML(page_text)
li_list=tree.xpath('//ul[@class="house-list-wrap"]/li')
fp=open('fangjia.txt','w',encoding='utf8')
for li in li_list:
title=li.xpath('./div[@class="list-info"]/h2/a/text()')[0]
price=li.xpath('./div[@class="price"]/p[@class="sum"]//text()')
price="".join(price)
fp.write('\n'+title+":"+price)
fp.close()
爬虫系列二(数据清洗--->;bs4解析数据)
一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...
爬虫系列二(数据清洗--->;正则表达式)
一 正则常识 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [0-9 ...
爬虫系列(二) Chrome抓包分析
在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...
xpath解析数据
xpath解析数据 """ xpath 也是一种用于解析xml文档数据的方式 xml path w3c xpath搜索用法 在 XPath 中,有七种类型的节点:元素.属 ...
Java爬虫系列二:使用HttpClient抓取页面HTML
爬虫要想爬取需要的信息,首先第一步就要抓取到页面html内容,然后对html进行分析,获取想要的内容.上一篇随笔中提到了HttpClient可以抓取页面内 ...
爬虫5_python2_使用 Beautiful Soup 解析数据
使用 Beautiful Soup 解析数据(感谢东哥) 有的小伙伴们对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HT ...
python爬虫学习之使用XPath解析开奖网站
实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件. 实例环境:pyth ...
iOS 抓取 HTML ,CSS XPath 解析数据
以前我们获取数据的方式都是使用 AFN 来 Get JSON 数据,比如 点我查看 JSON 数据.http://news-at.zhihu.com/api/4/news/latest 但例如下面的百 ...
python爬虫系列之爬京东手机数据
python抓京东手机数据 作者:vpoet mail:vpoet_sir@163.com #coding=utf-8 import urllib2 from lxml import etree im ...
随机推荐
android xml中的xliff属性
STM8L --- External interrupt
note 1: Several interrupts can be pending at the same time. When an interrupt request is not servic ...
MYSQL的锁介绍,以及死锁发生情况-带例子
mysql锁能在并发情况下的mysql进行更好的优化 MySQL有三种锁的级别:页级.表级.行级,这3种锁的特性可大致归纳如下: 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高 ...
JAVA基础知识之NIO——Buffer.Channel,Charset,Channel文件锁
NIO机制 NIO即NEW IO的意思,是JDK1.4提供的针对旧IO体系进行改进之后的IO,新增了许多新类,放在java.nio包下,并对java.io下许多类进行了修改,以便使用与nio. 在ja ...
Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)
作者: 大圆那些事 | 文章可以转载,请以超链接形式标明文章原始出处和作者信息 网址: http://www.cnblogs.com/panfeng412/archive/2013/12/17/dro ...
深入JVM系列之(3):JavaCore和HeapDump
jvm 生成javacore和heapdump文件 在Server端开发与运维中,经常需要生成javacore和heapdump文件,以便分析jvm的运行状态.javacore文件中给出jvm线程的详 ...
【前端学习】sublime开启vim模式
学习目标:在sublime下开启vim模式,了解基本vim的编辑快捷键. 下载安装Sublime Text 3 :http://www.sublimetext.com/3 Vim/Vi: Vim/Vi ...
0-1背包的动态规划算法,部分背包的贪心算法和DP算法------算法导论
一.问题描述 0-1背包问题,部分背包问题.分别实现0-1背包的DP算法,部分背包的贪心算法和DP算法. 二.算法原理 (1)0-1背包的DP算法 0-1背包问题:有n件物品和一个容量为W的背包.第i ...
erlang分布式编程模型
erlang分布式编程有两种模型 一.分布式erlang 运行在可信的网络环境中 1.rpc提供的远程过程调用 rpc:call(Node,Mode,Fun,Args) ->Result|{ba ...
VeeamBackup9.5安装与配置
产品介绍 Veeam是一家第三方的虚拟化数据中心备份及恢复公司,主要软件为Veeam Availability Suite,包括Veeam Backup & Replication和Veeam ...