(完整版)python+xpath笔记

合集下载

py xpath用法

py xpath用法

py xpath用法XPath(XML Path Language)是一种用于在XML文档中定位节点的语言。

在Python中,我们可以使用lxml库来使用XPath来解析和定位XML文档中的节点。

首先,我们需要安装lxml库。

可以使用pip命令来安装lxml 库:pip install lxml.一旦安装了lxml库,我们就可以开始使用XPath来解析XML文档。

下面是一个简单的例子来说明如何使用XPath:python.from lxml import etree.# 假设我们有一个XML文档如下:# <bookstore>。

# <book category="COOKING">。

# <title lang="en">Everyday Italian</title>。

# <author>Giada De Laurentiis</author>。

# <year>2005</year>。

# <price>30.00</price>。

# </book>。

# <book category="CHILDREN">。

# <title lang="en">Harry Potter</title>。

# <author>J.K. Rowling</author>。

# <year>2005</year>。

# <price>29.99</price>。

# </book>。

# </bookstore>。

# 解析XML文档。

tree = etree.parse('books.xml')。

Python快速掌握Python爬虫XPath语法

Python快速掌握Python爬虫XPath语法

Python快速掌握Python爬⾍XPath语法1.什么是XPath?xpath是⼀门在XML和HTML⽂档中查找信息的语⾔,可⽤来在XML和HTML⽂档中对元素和属性进⾏遍历,XPath 通过使⽤路径表达式来选取 XML ⽂档中的节点或者节点集。

这些路径表达式和在常规的电脑⽂件系统中看到的表达式⾮常相似。

2.XPath语法想要学好xpath,⾸先要搞明⽩html⽂档中的节点。

以上是在⽹上随便找的⼀段html的⽂本,可以观察得到,div的标签下是ul标签,⽽ul标签下是li标签,于是发现html的标签是⼀级⼀级如树状的。

Xpath正是通过这样的⽅式去寻找。

以⽣活中举例,要确定⼀个⼈的位置,⾸先确定他在中国,然后确定他在某个省份,哪座城市,那个⼩区,最后找到他。

同级标签可以⽤li[1],li[2],li[3]的⽅式获取3.lxml库简单介绍⼀下lxml库,接下来会⽤到它lxml是⼀个HTML/XML的解析器,主要的功能是如何解析和提取HTML/XML 数据。

lxml和正则⼀样,也是⽤C实现的,是⼀款⾼性能的PythonHTML/XML解析器,可以利⽤之前学习的XPath语法,来快速的定位特定元素以及节点信息。

4.实际案例随便爬取⼀个⽹站,找到找到⽹站的html⽂本,如下图要找到title和href,仔细观察可以得到路径分别是//div[@id="resultList"]/div[@class="el"]/p/span/a/@title//div[@id="resultList"]/div[@class="el"]/p/span/a/@href运⾏如下:5.总结Xpath,是在爬⾍中常见的提取数据的⽅式之⼀,相⽐于正则,它更加简单⼀些,便于操作,xpath的难点在于准确的确定数据所在的位置。

python中用xpath匹配文本段落内容的技巧

python中用xpath匹配文本段落内容的技巧

python中⽤xpath匹配⽂本段落内容的技巧content = item.xpath('//div[@class="content"]/span')[0].xpath('string(.)')content = item.xpath('//div[@class="content"]/span//text()')两种匹配规则,都能匹配到图中的⽂本段落内容:第⼀种匹配到的结果是:"content":"\n\n\n⼩⼉⼦5岁天⽣戏精在⾼铁站,⼀对夫妻带⼀男孩也5岁左右,⼩男孩坐地上耍赖,⼩夫妻与⼩男孩全程英语交流,坐他们对⾯的⼩⼉⼦看的云⾥雾⾥,突然转过头跟我说,“妈妈,他们说的话我也会。

”正在我惊讶之际,这⼩⼦⼀⾸“ABCDEFG……”好吧~\n\n"第⼆种匹配到的结果是:"content":["\n\n\n⼩⼉⼦5岁天⽣戏精", "在⾼铁站,⼀对夫妻带⼀男孩也5岁左右,⼩男孩坐地上耍赖,⼩夫妻与⼩男孩全程英语交流,坐他们对⾯的⼩⼉⼦看的云⾥雾⾥,突然转过头跟我说,“妈妈,他们说的话我也会。

”", "正在我惊讶之际,这⼩⼦⼀⾸“ABCDEFG……”", "好吧~\n\n"]第⼀种匹配规则得到的content,内容中的<br/>⾃动忽略,得到包含全部字符内容的整串,但是原本⽤换⾏符断句处没有逗号,产⽣的内容阅读起来可能不连贯。

第⼆种匹配规则得到的content,也将忽略内容中的<br/>,同时会以<br/>为间隔,将⽂本内容⽤逗号切开,最终得到⼀个字符串列表。

在对⽂本内容要求⽐较精确的情况下,可以将第⼆种规则匹配后的结果,⽤ "\n".join() 来对字符串列表进⾏处理,不会出现不连贯情况。

python爬虫之xpath的基本使用详解

python爬虫之xpath的基本使用详解

python爬⾍之xpath的基本使⽤详解⼀、简介XPath 是⼀门在 XML ⽂档中查找信息的语⾔。

XPath 可⽤来在 XML ⽂档中对元素和属性进⾏遍历。

XPath 是 W3C XSLT 标准的主要元素,并且XQuery 和 XPointer 都构建于 XPath 表达之上。

⼆、安装pip3 install lxml三、使⽤1、导⼊from lxml import etree2、基本使⽤from lxml import etreewb_data = """<div><ul><li class="item-0"><a href="link1.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >first item</a></li><li class="item-1"><a href="link2.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >second item</a></li> <li class="item-inactive"><a href="link3.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >third item</a></li><li class="item-1"><a href="link4.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fourth item</a></li><li class="item-0"><a href="link5.html" rel="external nofollow" rel="external nofollow" rel="external nofollow" >fifth item</a></ul></div>"""html = etree.HTML(wb_data)print(html)result = etree.tostring(html)print(result.decode("utf-8"))从下⾯的结果来看,我们打印机html其实就是⼀个python对象,etree.tostring(html)则是不全⾥html的基本写法,补全了缺胳膊少腿的标签。

python xpath写法

python xpath写法

Python xpath写法一、概述XPath(XML Path Language)是一门在 XML 文档中查找信息的语言,可以用来在 XML 文档中对元素和属性进行定位。

在 Python 中,使用 XPath 可以很方便地对 XML 或 HTML 文档进行解析和提取信息。

本文将介绍 Python 中使用 XPath 的写法,帮助读者更好地理解和应用这一技术。

二、导入相关库在使用 Python 进行 XPath 解析之前,需要导入相关的库。

通常情况下,我们会使用lxml 库进行XPath 解析。

在代码中需要先导入该库。

``` pythonfrom lxml import etree```三、XPath 基本写法在使用 Python 进行 XPath 解析时,需要掌握一些基本的写法规则。

下面将介绍几种常用的 XPath 写法。

1. 选取节点要选取节点,可以使用路径表达式。

路径表达式(Path Expression)用于选取 XML 文档中的节点或者节点集。

要选取 XML 文档中的所有<book> 节点,可以使用以下写法:``` pythonxpath = '//book'```2. 选取子节点如果要选取某个节点的子节点,可以使用斜杠(/)。

要选取 XML 文档中 <book> 节点的所有 <title> 子节点,可以使用以下写法:``` pythonxpath = '//book/title'```3. 选取父节点要选取某个节点的父节点,可以使用两个点(..)。

要选取 <title> 节点的父节点 <book>,可以使用以下写法:``` pythonxpath = '//title/..'```4. 选取指定属性的节点如果要选取具有指定属性的节点,可以使用方括号。

要选取所有带有category 属性的 <book> 节点,可以使用以下写法:``` pythonxpath = '//book[category]'```5. 选取指定条件的节点XPath 还支持使用谓语(Predicates)来选取满足指定条件的节点。

XPath小知识

XPath小知识

常用的XPath表达式一些常用的XPath表达式:/catalog/cd/price如果XPath的开头是一个斜线(/)代表这是绝对路径。

如果开头是两个斜线(//)表示文件中所有符合模式的元素都会被选出来,即使是处于树中不同的层级也会被选出来。

以下的语法会选出文件中所有叫做cd的元素(在树中的任何层级都会被选出来)://cd选择未知的元素使用星号(Wildcards,*)可以选择未知的元素。

下面这个语法会选出/catalog/cd 的所有子元素:/catalog/cd/*以下的语法会选出所有catalog的子元素中,包含有price作为子元素的元素。

/catalog/*/price以下的语法会选出有两层父节点,叫做price的所有元素。

/*/*/price以下的语法会选择出文件中的所有元素。

//*要注意的是,想要存取不分层级的元素,XPath语法必须以两个斜线开头(//),想要存取未知元素才用星号(*),星号只能代表未知名称的元素,不能代表未知层级的元素。

选择分支使用中括号可以选择分支。

以下的语法从catalog的子元素中取出第一个叫做cd的元素。

XPath的定义中没有第0元素这种东西。

/catalog/cd[1]以下语法选择catalog中的最后一个cd元素:(XPathj并没有定义first() 这种函式喔,用上例的[1]就可以取出第一个元素。

/catalog/cd[last()]以下语法选出含有price子元素的所有/catalog/cd元素。

/catalog/cd[price]以下语法选出price元素的值等于10.90的所有/catalog/cd元素/catalog/cd[price=10.90]以下语法选出price元素的值等于10.90的所有/catalog/cd元素的price元素/catalog/cd[price=10.90]/price选择一个以上的路径使用Or操作数( ¦)就可以选择一个以上的路径。

python爬虫xpath用法

python爬虫xpath用法

python爬虫xpath用法Python是一种广泛应用于网络爬虫开发的编程语言。

在Python 中,XPath是一种非常强大的工具,用于在HTML或XML文档中定位和提取特定的内容。

XPath是一种基于路径表达式的查询语言,通过使用不同的节点和操作符,可以轻松地从网页中获取所需的数据。

使用XPath进行网页数据提取的步骤如下:步骤1:安装必要的库在进行XPath网页数据提取之前,需要先确保安装了相关的库。

使用pip命令安装"lxml"库,该库提供了XPath解析器和相关功能。

步骤2:导入必要的模块在Python脚本中,需要导入"lxml"库中的相关模块,以便于使用XPath功能。

导入的模块通常包括"lxml.etree"和"requests",其中"lxml.etree"用于解析和提取HTML或XML文档,"requests"用于发送HTTP请求并获取网页内容。

步骤3:发送HTTP请求并获取网页内容使用"requests"库发送HTTP请求,并获取网页内容。

可以使用"get"方法发送GET请求,并将返回的响应保存在一个变量中。

步骤4:解析网页内容使用"lxml.etree"模块中的"HTML"方法解析网页内容。

将获取到的网页内容作为参数传递给"HTML"方法,并将返回的解析树保存在一个变量中。

步骤5:使用XPath表达式提取数据使用XPath表达式定位和提取所需的数据。

在"lxml.etree"模块中,可以使用"xpath"方法,并将XPath表达式作为参数传递给该方法。

步骤6:处理提取的数据根据需求,对提取的数据进行进一步的处理和整理。

Python爬虫之Xpath语法

Python爬虫之Xpath语法

Python爬⾍之Xpath语法XPath 是⼀门在 XML ⽂档中查找信息的语⾔。

XPath ⽤于在 XML ⽂档中通过元素和属性进⾏导航。

XPath 含有超过 100 个内建的函数。

这些函数⽤于字符串值、数值、⽇期和时间⽐较、节点和 QName 处理、序列处理、逻辑值等等。

XPath 是 W3C 标准,XPath 于 1999 年 11 ⽉ 16 ⽇成为 W3C 标准。

XPath 被设计为供 XSLT、XPointer 以及其他 XML 解析软件使⽤。

在XPath 中,有七种类型的节点:元素、属性、⽂本、命名空间、处理指令、注释以及⽂档节点(或称为根节点)。

XML ⽂档是被作为节点树来对待的。

树的根被称为⽂档节点或者根节点。

⼀、选取节点常⽤的路径表达式:表达式描述实例nodename选取nodename节点的所有⼦节点xpath(‘//div’)选取了div节点的所有⼦节点/从根节点选取xpath(‘/div’)从根节点上选取div节点xpath(‘//div’)选取所有的div节点//选取所有的当前节点,不考虑他们的位置.选取当前节点xpath(‘./div’)选取当前节点下的div节点..选取当前节点的⽗节点xpath(‘..’)回到上⼀个节点@选取属性xpath(’//@calss’)选取所有的class属性⼆、谓词:被嵌在⽅括号内,⽤来查找某个特定的节点或包含某个制定的值的节点表达式结果xpath(‘/body/div[1]’)选取body下的第⼀个div节点xpath(‘/body/div[last()]’)选取body下最后⼀个div节点xpath(‘/body/div[last()-1]’)选取body下倒数第⼆个div节点xpath(‘/body/div[positon()<3]’)选取body下前两个div节点xpath(‘/body/div[@class]’)选取body下带有class属性的div节点xpath(‘/body/div[@class=”main”]’)选取body下class属性为main的div节点xpath(‘/body/div[price>35.00]’)选取body下price元素值⼤于35的div节点三、通配符:Xpath通过通配符来选取未知的XML元素表达式结果xpath(’/div/*’)选取div下的所有⼦节点xpath(‘/div[@*]’)选取所有带属性的div节点四、取多个路径:使⽤“ | 运算符可以选取多个路径表达式结果xpath(‘//div|//table’)选取所有的div和table节点五、Xpath轴:轴可以定义相对于当前节点的节点集轴名称表达式描述ancestor xpath(‘./ancestor::*’)选取当前节点的所有先辈节点(⽗、祖⽗)ancestor-or-self xpath(‘./ancestor-or-self::*’)选取当前节点的所有先辈节点以及节点本⾝attribute xpath(‘./attribute::*’)选取当前节点的所有属性child xpath(‘./child::*’)返回当前节点的所有⼦节点descendant xpath(‘./descendant::*’)返回当前节点的所有后代节点(⼦节点、孙节点)following xpath(‘./following::*’)选取⽂档中当前节点结束标签后的所有节点following-xpath(‘./following-sibing::*’)选取当前节点之后的兄弟节点sibingparent xpath(‘./parent::*’)选取当前节点的⽗节点preceding xpath(‘./preceding::*’)选取⽂档中当前节点开始标签前的所有节点preceding xpath(‘./preceding::*’)点preceding-sibling xpath(‘./preceding-sibling::*’)选取当前节点之前的兄弟节点self xpath(‘./self::*’)选取当前节点六、功能函数:使⽤功能函数能够更好的进⾏模糊搜索函数⽤法解释starts-with xpath(‘//div[starts-with(@id,”ma”)]‘)选取id值以ma开头的div节点contains xpath(‘//div[contains(@id,”ma”)]‘)选取id值包含ma的div节点and xpath(‘//div[contains(@id,”ma”) andcontains(@id,”in”)]‘)选取id值包含ma和in的div节点text()xpath(‘//div[contains(text(),”ma”)]‘)选取节点⽂本包含ma的div节点七、常⽤函数:1、精确定位(1)contains(str1,str2)⽤来判断str1是否包含str2例1://*[contains(@class,'c-summaryc-row ')]选择@class值中包含c-summary c-row的节点例2://div[contains(.//text(),'价格')]选择text()中包含价格的div节点(2)position()选择当前的第⼏个节点例1://*[@class='result'][position()=1]选择@class='result'的第⼀个节点例2://*[@class='result'][position()<=2]选择@class='result'的前两个节点(3)last()选择当前的倒数第⼏个节点例1://*[@class='result'][last()]选择@class='result'的最后⼀个节点例2://*[@class='result'][last()-1]选择@class='result'的倒数第⼆个节点(4)following-sibling 选取当前节点之后的所有同级节点例1://div[@class='result']/following-sibling::div选择@class='result'的div节点后所有同级div节点找到多个节点时可通过position确定第⼏个如://div[@class='result']/following-sibling::div[position()=1](5)preceding-sibling 选取当前节点之前的所有同级节点使⽤⽅法同following-sibling2、过滤信息(1)substring-before(str1,str2)⽤于返回字符串str1中位于第⼀个str2之前的部分例⼦:substring-before(.//*[@class='c-more_link']/text(),'条')返回.//*[@class='c-more_link']/text()中第⼀个'条'前⾯的部分,如果不存在'条',则返回空值(2)substring-after(str1,str2)跟substring-before类似,返回字符串str1中位于第⼀个str2之后的部分例1:substring-after(.//*[@class='c-more_link']/text(),'条')返回.//*[@class='c-more_link']/text()中第⼀个’条’后⾯的部分,如果不存在'条',则返回空值例2:substring-after(substring-before(.//*[@class='c-more_link']/text(),'新闻'),'条')返回.//*[@class='c-more_link']/text()中第⼀个'新闻'前⾯与第⼀个'条'后⾯之间的部分(3)normalize-space()⽤来将⼀个字符串的头部和尾部的空⽩字符删除,如果字符串中间含有多个连续的空⽩字符,将⽤⼀个空格来代替例⼦:normalize-space(.//*[contains(@class,'c-summaryc-row ')])(4)translate(string,str1,str2)假如string中的字符在str1中有出现,那么替换为str1对应str2的同⼀位置的字符,假如str2这个位置取不到字符则删除string的该字符例⼦:translate('12:30','03','54')结果:'12:45'3、拼接信息(1)concat()函数⽤于串连多个字符串例⼦:concat('',.//*[@class='c-more_link']/@href)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
选取body下带有class属性的div节点
xpath(‘/body/div[@class=”main”]’)
选取body下class属性为main的div节点
xpath(‘/body/div[price>35.00]’)
选取body下price元素值大于35的div节点
三、通配符
Xpath通过通配符来选取未知的XML元素
一、选取节点
常用的路劲表达式:
表达式
描述
实例
nodename
选取nodename节点的所有子节点
xpath(‘//div’)
选取了div节点的所有子节点
/
从根节点选取
xpath(‘/div’)
从根节点上选取div节点
//
选取所有的当前节点,不考虑他们的位置
xpath(‘//div’)
选取所有的div节点
选取body下的第一个div节点
xpath(‘/body/div[last()]’)
选取body下最后一个div节点
xpath(‘/body/div[last()-1]’)
选取body下倒数第二个div节点
xpath(‘/body/div[positon()<3]’)
选取body下前两个div节点
xpath(‘/body/div[@class]’)
following-sibing
xpath(‘./following-sibing::*’)
选取当前节点之后的兄弟节点
parent
xpath(‘./parent::*’)
选取当前节点的父节点
preceding
xpath(‘./preceding::*’)
选取文档中当前节点开始标签前的所有节点
preceding-sibling
选取节点文本包含ma的div节点
表达式
结果
xpath(’/div/*’)
选取div下的所有子节点
xpath(‘/div[@*]’)
选取所有带属性的div节点
四、取多个路径
使用“|”运算符可以选取多个路径
表达式
结果
xpath(‘//div|//table’)
选取所有的div和table节点
五、Xpath轴
轴可以定义Байду номын сангаас对于当前节点的节点集
轴名称
表达式
描述
ancestor
xpath(‘./ancestor::*’)
选取当前节点的所有先辈节点(父、祖父)
ancestor-or-self
xpath(‘./ancestor-or-self::*’)
选取当前节点的所有先辈节点以及节点本身
attribute
xpath(‘./attribute::*’)
xpath(‘./preceding-sibling::*’)
选取当前节点之前的兄弟节点
self
xpath(‘./self::*’)
选取当前节点
六、功能函数
使用功能函数能够更好的进行模糊搜索
函数
用法
解释
starts-with
xpath(‘//div[starts-with(@id,”ma”)]‘)
选取id值以ma开头的div节点
选取当前节点的所有属性
child
xpath(‘./child::*’)
返回当前节点的所有子节点
descendant
xpath(‘./descendant::*’)
返回当前节点的所有后代节点(子节点、孙节点)
following
xpath(‘./following::*’)
选取文档中当前节点结束标签后的所有节点
.
选取当前节点
xpath(‘./div’)
选取当前节点下的div节点
..
选取当前节点的父节点
xpath(‘..’)
回到上一个节点
@
选取属性
xpath(’//@calss’)
选取所有的class属性
二、谓语
谓语被嵌在方括号内,用来查找某个特定的节点或包含某个制定的值的节点
实例:
表达式
结果
xpath(‘/body/div[1]’)
contains
xpath(‘//div[contains(@id,”ma”)]‘)
选取id值包含ma的div节点
and
xpath(‘//div[contains(@id,”ma”) and contains(@id,”in”)]‘)
选取id值包含ma和in的div节点
text()
xpath(‘//div[contains(text(),”ma”)]‘)
相关文档
最新文档