爬虫的步骤解析内容xpath介绍_爬虫系列二(数据清洗--->xpath解析数据)

本文详细介绍了XPath的用途,如在XML文档中导航、包含的标准函数库及其在XSLT中的作用。讲解了XPath的基本术语,如节点关系、术语概念,并提供了路径表达式的示例,帮助理解其选取节点的功能。最后,通过一个实际案例展示了如何使用XPath在Python中配合lxml库解析HTML数据,抓取二手房价信息并保存到文件中。
摘要由CSDN通过智能技术生成

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

爬虫系列二&lpar;数据清洗---&gt&semi;bs4解析数据&rpar;

一 BeautifulSoup解析 1 环境安装 - 需要将pip源设置为国内源,阿里源.豆瓣源.网易源等 - windows (1)打开文件资源管理器(文件夹地址栏中) (2)地址栏上面输入 %ap ...

爬虫系列二&lpar;数据清洗---&gt&semi;正则表达式&rpar;

一 正则常识 模式 描述 \w 匹配字母数字及下划线 \W 匹配非字母数字及下划线 \s 匹配任意空白字符,等价于 [\t\n\r\f]. \S 匹配任意非空字符 \d 匹配任意数字,等价于 [0-9 ...

爬虫系列&lpar;二&rpar; Chrome抓包分析

在这篇文章中,我们将尝试使用直观的网页分析工具(Chrome 开发者工具)对网页进行抓包分析,更加深入的了解网络爬虫的本质与内涵 1.测试环境 浏览器:Chrome 浏览器 浏览器版本:67.0.33 ...

xpath解析数据

xpath解析数据 """ xpath 也是一种用于解析xml文档数据的方式 xml path w3c xpath搜索用法 在 XPath 中,有七种类型的节点:元素.属 ...

Java爬虫系列二:使用HttpClient抓取页面HTML

爬虫要想爬取需要的信息,首先第一步就要抓取到页面html内容,然后对html进行分析,获取想要的内容.上一篇随笔中提到了HttpClient可以抓取页面内 ...

爬虫5&lowbar;python2&lowbar;使用 Beautiful Soup 解析数据

使用 Beautiful Soup 解析数据(感谢东哥) 有的小伙伴们对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HT ...

python爬虫学习之使用XPath解析开奖网站

实例需求:运用python语言爬取http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html这个开奖网站所有的信息,并且保存为txt文件. 实例环境:pyth ...

iOS 抓取 HTML &comma;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&period;Channel&comma;Charset&comma;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系列之&lpar;3&rpar;&colon;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&period;5安装与配置

产品介绍 Veeam是一家第三方的虚拟化数据中心备份及恢复公司,主要软件为Veeam Availability Suite,包括Veeam Backup & Replication和Veeam ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值