群众号:尤而小屋
作者:Peter
修正:Peter

强健的Xpath

之前爬虫解析数据的时分,自己几乎都是用正则表达式。正则解析数据很强健,可是表达式写起来很费事,速度相对较慢。本文介绍的是怎样快速入门一种数据解析东西:Xpath。

又一个强壮的爬虫数据解析东西:Xpath

Xpawindows7旗舰版th介绍

XPath (XML Path)是一门在 XML 文档中查找信息的言语。XPatwindows检查删除文件记载hHTML用来在XML文档中对元素和特征进行遍历。

XPath 是 W3C XSLT 规范的首要元素,而且 XQuewindows怎样激活ry 和 XPointer 都构建于 XPath 表达之上。

  • Xpath是一种查询言语
  • 在XML(Extensible Markup Language)和HTML索引超出矩阵维度的树状结windows更新构中寻觅节点
  • XPATH是一种根据‘地址’来‘html文件怎样翻开寻觅人’的言语

快速入门网站:www.w3schools.com/xml/default…

Xpath设备

MacOS中设备非常的简略:

pip install lxml

Linux中windows7旗舰版的设备以Ubuntu为例:

sudwindows许可证行将过期怎样办o apt-get install python-lxml

Windows中的设备请自行百度,必定会有教程的,便是过程相对会比较费事些。

怎样查验设备是否成功?命令行中import lxm龚俊l没有报错,即标明设备html成功!

又一个强壮的爬虫数据解析东西:Xpath

Xpath解析原理

  • 实例化一个etree解析政策,且需求将解析的页面源码数据加载到政策中
  • 调用xpath中的xpath解析办法结windows10合着xpath表达式实现标签的定位和内容的捕获

怎样实例化windows是什么意思etree政策?

  1. 将本地的html文档中的源码数据加载到etree政策中:etree.parse(filePath)
  2. 将互联网上获取的源码数据加载到该政策中:etree.HTML(‘page_t宫崎骏ext’),其间page_text指的便是咱们获取到的源码内容

Xpath运用办法

3个宫颈癌前期症状特殊符号

  • /:标明从根节点开端解析,而且是单个层级,逐渐定位
  • //:标明多个层级,能够越过其间的部分层级;也标明http协议从任意方位开端定位
  • .:一个点标明当时的节点

常见途径表达式

下面是常见的Xpath途径表达式:

又一个强壮的爬虫数据解析东西:Xpath

表达式 描绘
nodename HTML取此节点的悉数子节点。
/ 从根节点选取。
// 从匹配挑选的当时节点挑选文档中的节点,而不考虑它们索引优化的方位。
. 选取当时节点。
选取当时节点的父节点。
@ 选取特征。

举例

又一个强壮的爬虫数据解析东西:Xpath

表达式 说明
books 选取 books 元素的悉数子节点
/books 选取根元素 bookstore
bo宫颈癌oks//title 选取归于windows许可证行将过期怎样办 books 的子元素的悉数 title 元素
//price 选取悉数 prichttp协议e 元素
books/book[3] 选取归于 books 子元素的第3个httpclient book 元素,索引从1开端
/bookstore/book[price>55.0] 选取悉数单价大于55的 book 元素
//@category 选取悉数名为 category 的特征
/books/book/title/text() 选取文档悉数 title 值

Xpath运算符

在Xpath表达式式中是直接支撑运算符的:

又一个强壮的爬虫数据解析东西:Xpath

Operator DescWindowsription Example Chinehttp://192.168.1.1登录se
| Computes two node-sets //book | //cd 兼并两个作用
+ Addition 6 + 4
Su龚俊btraction 6 – 4
* Multiplication 6 * 4
div Division 8 di宫颈癌v 4
= Equal price=9.80 等于
!= Not equal price!=9.80 不等于
< Less than price<9.80 小于
<= Less than or equal to price<=9.80 小于等于http://www.baidu.com
> Greater thaHTTPn price>9工商银行.80 大于
>= Greater than or equal to price>=9.80 大于等于
or or price=9.80 or price=9.70
and索引失效的几种状况 and price>9.00 and price<9.html网页制造90
mod Modulus (divisionWindows remainder) 5 mod 2 求余

HTML元素

HTML 元素指的是从开端标签(start tag)到结束标签(end tag)的悉数代码。根本语法:

  • HTML 元素以开端标签开端;HTML 元素以结束标签间断
  • 元素的html内容是开端标签与结束标签之间的内容
  • 某些 HTML 元素具有空内容(empty cohttps和http的差异ntent)
  • 空元素在开端标签中进行关闭(以开端标签的结束而结束)
  • 大多数 HTML 元素可具有特征;特征html个人网页完好代码引荐运用小写

关于空元素的运用:html文件怎样翻开在开端标签中增加斜杠,比方 <br />,是封龚俊闭空元素的正确办法,HTML、XHTMLhttps和http的差异 和 XML 都承受这种办法。

常见特征

又一个强壮的爬虫数据解析东西:Xpath

特征 描绘
c公积金lass classname 规则元素的类名(classnahttp协议me)
id id 规则元素的仅有 id
style style_definithtml标签特点大全iowindows怎样激活n 规则元素的行内样式(inline style)
title text 规则元素的额定信息(可在东西提示龚俊中显现)

HTML标题

HTML中标题共有6级。

标题(Heading)是经过 <hhttp 5001> - <h6&ghtmlt; 等标签进行定义的。

<h1> 定义最大的标题,<h6> 定义最小的标题。

事例解析

原数据

运用Xpath解析数据之前,咱们需求先导入库,一起实例化一个etree政策:

# 导入库
from lxml import etree
# 实例化解http 404析政策
tree = etree.parse("tes索引怎样做t.html")
tree

下面是待解析的原数据teshttp://192.168.1.1登录t.html:

  1 &ltwindows更新;html lang="en">
2 <head>
3html是什么意思     &龚俊lt;meta charset="UTF-8" />
4     <title>古代诗人及著作</title>
5 </head>
6 <body>
7     <div>
8         <p>诗人姓名</p>
9     <windows7/div>
10     <div class="name">
11         &lhtml代码t;p>李白</p&gtwindows怎样激活;
12         <p>白居易</p>
13         <p>李清照</p>
14         <p>杜甫</p>
15         <p>王安石</p>
16         <a href="工商银行httpwindows系统://wwww.tang.com" title="李世民" target="_self">
17             <span> this is span </span>
18         古代诗人写的诗词真的非常棒</a>
19         <a href="" class="du">床前狗狗币明月光,疑是地上霜</a>
20         <img src="http:/windows10激活密钥/www.baidu.cgoogleplayom/tang.jpg" alt="" />
21     </div>
22     <div class="tang">
23         <ul&gthtml简略网页代码;
24             <li><html文件怎样翻开a href="http://www.baidu.com" title="百度">朝辞白帝彩html简略网页代码云间,html网页制造千里江陵一日还</a></li>
25             <li><a href="http://www.s索引是什么意思ougou.com" title="搜狗">清明时节雨纷繁,路上行人欲断魂</a></li>
26             <li><a href="htthtml是什么意思p://www.360.com" alt="360"&gt索引失效的几种状况;秦时明月汉时关,万里长征windows是什么意思人未还</a></li>
27             <li><a href="ht索引是什么意思tp://www.sina.com" title="必应">宫崎骏正人赠人以言,庶人赠人以财</a>HTTP</li>
2http 5008             <li><b>苏轼</b></li>
29             &lthttps和http的差异;li&g索引失效t;<i>苏洵&windows7旗舰版lt;/i></li>
30             <li><a索引失效 href="http://www.google.cn" id="谷歌">欢迎运用谷歌浏览器</a></li>
31         </ul>
3索引失效2     </div>
33http://www.baidu.com &lhtml标签t;/body>
34 </html>

又一个强壮的爬虫数据解析东西:Xpath

获取单个标签内容

比方googleplay想获取title标签中的内容:古代诗人及著作

又一个强壮的爬虫数据解析东西:Xpath

title = tree.xpathHTML("/html/head/title")
title

又一个强壮的爬虫数据解析东西:Xpath

经过上面的作用发现:每个Xpath解析的作用都是一个列表

假想象取得标签中的文本内容,运用text(宫颈癌前期症状):

# 从列表中提取相应内容html网页制造
title = tree.xpath("/html/head/title/text()")[0]  #http协议 索引0标明windows怎样激活取得第一个公积金元素值
title

又一个强壮的爬虫数据解析东西:Xpath

获取标签内的多个内容

比方咱们想获取div标签的内容,原数据中有3对div标签,作用是列表中含有3个元素:

又一个强壮的爬虫数据解析东西:Xpath

1、httpclient运用单斜线/:标明根节点html开端定位,标明的是一个层级

又一个强壮的爬虫数据解析东西:Xpath

2、中心运用双斜线//:标明越过中心的层级,标明的是多个层级

又一个强壮的爬虫数据解析东西:Xpath

3、开端部位运用双斜线//:标明从任意索引图方位开端

又一个强壮的爬虫数据解析东西:Xpath

特征定位

运用特征定位的时分直接在标签后边跟上[@特征名="特征值"]宫崎骏

又一个强壮的爬虫数据解析东西:Xpath

name = tree.HTMLxpath('//div[@html5class="name"]')   # 定位索引页是哪一页class特征,值为name
name

又一个强壮的爬虫数据解析东西:Xpath

索引定位

Xpath中索引是从1开端,和pythwindows7on中的索引从0开端是不同的。比方想定位div标签下class特征(值为name)下的悉数p标签:5对p标签,作用应html标签特点大全该是5个元素

又一个强壮的爬虫数据解析东西:Xpath

# 获取悉数数据
index = tr索引失效的几种状况ee.xpat工商银行hwindows10激活密钥('//div[@c宫颈癌前期症状lass="name"]/p')
index

又一个强壮的爬虫数据解析东西:Xpath

假定咱们想获取其间windows10激活密钥的第3个p标签:

# 获取单个指定数据:索引windows许可证行将过期怎样办从1开端
index = tree.xpath('//div[@claHTMLss=http://www.baidu.com"name"]/p[3]')  # 索引从1开端
index

又一个强壮的爬虫数据解析东西:Xpath

获取文本内容

第一种办法:text()办法

1、获取具体某http://www.baidu.comwindows检查删除文件记载标签下面的元素:

# 1、/:单个层级
class_text = tree.xpath('//div[@class="tanghtml5"]/ul/li/b/text()')
class_text
# 2、//:多个层级
class_text = tree.xpatgoogleh('//div[@class="tang"]//b/text()')
class_text

又一个强壮的爬虫数据解析东西:Xpath

2、某个标签下面的多个内容

又一个强壮的爬虫数据解析东西:Xpath

比方想获取p标签下面的悉数内容:

# 获取悉数数据
p_text = tree.xpath('//div[@class="name"]/p/text()')
p_text

又一个强壮的爬虫数据解析东西:Xpath

比方想获取第3个p标签下面的内容:

# 获取第3个标签内容
p_text = tree.xpath('//div[@class="name"]/p[3]/text()')
p_text

又一个强壮的爬虫数据解析东西:Xpath

假定是先获取p标索引失效狗狗币中的悉数内容,作用是列表,再运用python索引获取,留意索引为2:

又一个强壮的爬虫数据解析东西:Xpath

非标签直系内容的获取:

又一个强壮的爬虫数据解析东西:Xpath

标签直系内容的获取:作用为空,直系的li标签中没有任何内容

又一个强壮的爬虫数据解析东西:Xpath

假想象获取li标签的悉数内容,能够将下面的a、b、i标签兼并起来,运用竖线|

又一个强壮的爬虫数据解析东西:Xpath

# 一起宫颈癌前期症状获取li标签html个人网页完好代码下面a/b/i标签的内容,恰当所以li标签悉数的内容
abi_text = tree.xpath('//div[@class="tang"]//l狗狗币i/a/text() |html5 //div[@class="tan工商银行g"]//li/b/text() | //div[@class="索引优化tang"]//li/i/text()')
abi_windows系统text

又一个强壮的爬虫数据解析东西:Xpath

直系和非索引页是哪一页直系了解

又一个强壮的爬虫数据解析东西:Xpath

取特征内容

假想象获取特征的值,在终究的表达式中加上:@+特征名,即可取出相应特征的值

1、获取单个特征的值

又一个强壮的爬虫数据解析东西:Xpath

又一个强壮的爬虫数据解析东西:Xpath

2、获取特征的多个值

又一个强壮的爬虫数据解析东西:Xpath

又一个强壮的爬虫数据解析东西:Xpath

特征的开端和包括

Xpath中支撑以某些字符串开端或许包括某些字符来结构XPath表达式,Xhttp 500path中不存在以字符串结束的表达式

  • 开端:starts-with
  • 包括:contains

语法能够写为:

//标签[starts-with(@特征名,"相同部分的字符串")]
//标签[conatians(@特征名,"相同部分的字符串"索引符号)]

1、以字符串开端

获取a标签下以http开端的href下的文本内容

又一个强壮的爬虫数据解析东西:Xpath

又一个强壮的爬虫数据解析东西:Xpath

2、包索引是什么意思含字符串

a标签下title特征包括百度的文本内容:

又一个强壮的爬虫数据解析东西:Xpath

总结

在这google里对Xpath的运用总结下:

  • //:标明获取标签非直系内容,有跨过层级
  • /:标明只获取标签的直系内容,不跨过层级
  • 假定索引是https和http的差异在Xpath表达式中,索引从1开端;假定从Xpath表达式中获取到列表数据后,再运用python索引取数,索引从0开端

实战

使用XPAThtml标签特点大全H来爬取小说网站上古龙的悉数小说称谓(name)和URL地址(uhttp 500rl),古龙简介:

本名熊耀华,江西人;台湾淡江英专(即淡江大学前身)结业(一说google肄业)。少年时html简略网页代码期便索引是什么意思公积金读古今武侠小说及西洋文学著作,一般多认为他是遭到吉川英治、大小仲马、海明威、杰克伦敦、史坦贝克小说乃至尼采、googleplay沙特等西洋哲学的影响启迪。 (古龙自己也说过“我喜爱从近代日本及西洋小说‘偷招’。”) 故能日新又新,後来居上,且别开武侠小说新索引优化境界。

网页数据剖析

爬取的信windows更新公积金在这个网站上:www.kanunu8.com/zj/108索引页是哪一页67.ht…

又一个强壮的爬虫数据解析东西:Xpath

当咱们点击具体某个小说,比方“绝代双骄”就能够进去该小说的具体信息中:

又一个强壮的爬虫数据解析东西:Xpath

经过检查网页的源码,宫崎骏咱们发现称谓google和URL地址悉数不才面的标签中:

又一个强壮的爬虫数据解析东西:Xpath

每个tr标签windows7下面有3个td标签,索引是什么意思代表3个小说,一个td包括地址和称谓

又一个强壮的爬虫数据解析东西:Xpath

获取网页源码

发送网页央求获取到源码html5

import requests
from lxml import etree
import pandas as pd
url = 'https://www.kanunu8.com/zj/10867.html'
headers = {'use索引失效的几种状况r-agent'狗狗币:windows许可证行将过期怎样办 '央求头'}
response = requests.get(url = url,headers = headers)
result = respWindowsonse.content.decode('gbk')   # 该网页需求经过gbk编码来解析数windows10激活密钥
result

又一个强壮的爬虫数据解析东西:Xpath

获取信息

1、获取每个小说的专属链接地址

tree = etree.HTML(rwindows检查删除文件记载esult)
href_list = tree.xpath('//tbody/tr//a/@href')  # 指定特征的信息
href_list枸杞[:龚俊5]

又一个强壮的爬虫数据解析东西:Xpath

2、获取每个小说的称谓

name_list = tree.xpath('//tbody/tr//a/text()')  # 指定标签下面的悉数内容
name_list[:5]

又一个强壮的爬虫数据解析东西:Xpath

3、生成数据帧DataFrame

# 生成古龙小说的地址和称谓
gulong = pd.DataFrame({
"name":name_list,
"url":href_list
})
gulong

又一个强壮的爬虫数据解析东西:Xpath

4、完善URL地址

实际上每个小说的U宫颈癌RL地址是有一个前缀的,比方绝代双骄的无缺地址:www.kanunu8.com/bhttps和http的差异o索引图ok/4573/

gulong['url'] = 'https://www.kanunu8.com/book' + gulong['url']宫崎骏   # 加上公共前缀
gulong
# 导出为excel文件
gulong.to_excel索引失效("gulong.xlsx",index=索引图False)

又一个强壮的爬虫数据解析东西:Xpath