jquery抓取网页内容(Xpath:简单易用的网页内容提取工具学习爽,一直学习一直爽!)

优采云 发布时间: 2022-04-10 23:37

  jquery抓取网页内容(Xpath:简单易用的网页内容提取工具学习爽,一直学习一直爽!)

  Xpath:一个易于使用的网页内容提取工具

  学习一时爽,学习永远爽!

  大家好,我是康纳,一个从零开始的技术新手。上次我们讲了如何使用请求。在上一课中,我们已经学习了所有常见的 Python 访问库。那么当我们得到我们访问的内容时,我们应该从网页中提取出我们想要的内容。因此,今天我们就来聊一聊常用的网页内容提取工具之一:Xpath。与 BeautifulSoup 相比,Xpath 更易于使用。

  1.Xpath 简介

  Xpath 是一种用于在 XML 文档中查找信息的语言。XPath 用于浏览 XML 文档中的元素和属性。他是一种路径语言(XML Path Language),用来确定一个XML文档的某一部分的位置。

  XPath 基于 XML 的树结构,它提供了在数据结构树中查找节点的能力。XPath 的初衷是将其用作 XPointer 和 XSL 之间的通用语法模型。但是 XPath 很快被开发人员采用,并被广泛用作小型*查询语言。例如,当您打开网页并按 F12 进行元素检查时。当要复制元素的路径时,可以通过右键进行复制操作。您将在里面找到 Copy Xpath 的选项。这显示了 Xpath 的广泛使用。

  说了这么多Xpath的使用范围有多大,使用起来有多么简单,让我们开始做正事,看看Xpath是如何在Python爬虫中用来爬取我们想要的内容的:

  2. Xpath 安装

  在之前的教程中,我几乎没有提到某个库的安装,但为什么我在这里提到如何安装呢?原因很简单,Xpath 只是 lxml 库中的一个模块。许多 Python 库都提供了 Xpath 函数,但最基本的是 lxml 库。最有效率。所以,你知道,要使用 Xpath,你需要安装 lxml 库:

  pip install lxml

复制代码

  3.Xpath 语法

  其实说白了,Xpath就是从html中选择节点。通过以下路径或步骤选择节点。下面,我们将通过以下HTML文档进行演示:

  html_doc ="""

总裁的新鲜小妻子

斗神天下

"""

复制代码

  首先大家都知道,我们实际上从网页中得到的是字符串格式。所以如果我们想通过 Xpath 提取我们想要的东西,我们首先需要生成 HTML DOM 树:

  from lxml import etree

page = etree.HTML(html_doc)

复制代码

  3.1 路径查找

  如果我们要使用寻路,我们首先需要知道 Xpath 的语法。Xpath的主要语法如下:

  表达式描述

  节点名

  选择名为nodename的子节点

  /

  从根节点挑选

  //

  从与选择匹配的当前节点中选择文档中的节点,而不考虑它们的位置。

  .

  选择当前节点

  ..

  选择当前节点的父节点

  @

  选择属性

  In [1]: page.xpath('head')

Out[1]: []

复制代码

  当前节点位置在html中,所以可以直接查询头节点,li是html的孙子节点,如果查询li则返回空值:

  In [2]: page.xpath('li')

Out[2]: []

复制代码

  In [3]: page.xpath('/html')

Out[3]: []

复制代码

  从根节点搜索,根节点下只有一个节点html节点,所以从根节点只能找到html,如果搜索其他内容,会返回一个空列表:

  In [4]: page.xpath('/li')

Out[4]: []

复制代码

  In [5]: page.xpath('//li')

Out[5]:

[,

,

,

]

复制代码

  从整个文档中查找在整个文档中查找符合条件的节点,包括孙节点及以下。

  In [6]: page.xpath('//li')[0].xpath('..')

Out[6]: []

复制代码

  In [7]: page.xpath('//a')[1].xpath('@href')

Out[7]: ['/book_16860.html']

复制代码

  选中属性支持任意标签属性,但需要注意的是,如果选中的节点有多个,需要指定是哪个节点的属性。

  3.2 节点查找

  通过路径找到节点后,我们需要从超级找到的节点中选择我们需要的内容。还有一些查找节点的语法,如下:

  表达结果

  节点名[索引]

  选择满足要求的第 index 个元素

  节点名[last()]

  选择最后一个元素

  节点名[位置()

  选择前 num 个元素

  节点名[@attribute]

  选择属性名为attribute的元素

  节点名[@attribute='值']

  选择具有属性名称属性和值值的元素

  In [1]: page.xpath('//li[1]/a[1]/img[1]/@src')

Out[1]: ['/16860s.jpg']

复制代码

  **注意:选择节点的属性时需要注意一件事。[index] 选择的节点是每个条件的第 [index] 个合格元素。**不过这个比较抽象,举个例子吧。例如:

  In [2]: page.xpath('//li[1]') 选取所有符合 li 节点的第一个节点

Out[2]: []

复制代码

  从上面的例子中,我们似乎什么都看不到,那么我们来看下面的例子:

  In [3]: page.xpath('//li//img[1]')

Out[3]: [,

,

,

]

复制代码

  如您所见,我们选择了 4 个 img 节点。原因很简单,看下面的代码和解释就明白了:

  

(一)

(二)

(三)

总裁的新鲜小妻子

(四)

(五)

(六)

斗神天下

复制代码

  (一) 是第一个节点中的第一个节点

  节点。它的路径是 //

  (二) 是第一个节点的

  首先在节点

  节点。它的路径是/

  . (三) 没有被选中,因为它是标签下的第二个

  标签 (四) (五) (六)类似

  In [4]: page.xpath('//img[position()>1]')

Out[4]: [, ]

复制代码

  3.3 匹配未知节点

  当我们匹配时,会有一条不确定的路径。此时,我们将涉及匹配未知节点。匹配未知节点也有对应的语法,如下:

  通配符说明

  *

  匹配任何元素节点

  @*

  匹配任何属性节点

  匹配任意属性节点:

  In [1]: page.xpath('//li/a/*')

Out[1]: [,

,

,

]

复制代码

  匹配任何元素节点:

  In [2]: page.xpath('//li/a[@*]')

Out[2]: [,

,

,

]

复制代码

  3.4 获取节点中的文本

  可以通过attribute方法获取属性中的内容,但无法获取节点之间的内容。这时可以通过 text() 和 string() 方法获取其中的文本:

  使用 text() 获取节点中的文本:

  In [1]: page.xpath('//li/a[3]/text()')

Out[1]: ['总裁的新鲜小妻子', '斗神天下']

复制代码

  如您所见,标签之间的文本可以通过 text() 属性轻松获取。

  使用 string() 获取节点中的文本:

  In [1]: page.xpath('string(//li[1]/a[3])')

Out[1]: '总裁的新鲜小妻子'

复制代码

  3.5 选择多个路径

  有时我们需要同时查找多个条件。此时,您可以通过在路径表达式中使用竖线字符(“|”)来选择多个路径:

  In [1]: page.xpath('//li[1]/img[2]/@src | //li[1]/a[3]/text()')

Out[1]: ['/kukuku/images/second.png', '总裁的新鲜小妻子']

复制代码

  同时选择多条路径不会生成新的列表,只会生成一个列表,所以你需要考虑如何提取你返回的结果。一般来说,不建议使用多个条件进行搜索,因为将多个提取结果混合在一个列表中不利于提取。即使可以提取,也会增加计算量,降低程序性能。所以,尽量不要使用这种方法。

  下一条通知:

  Xpath用起来还是那么费劲,有没有其他更简单的方法?? ? 当然有,你可以用美味的汤完成你需要做的事情。敬请关注下一期 - BeautifulSoup:美味汤

  以上就是所有Xpath相关的内容了,可能没有其他的详细,但是对于你作为爬虫使用来说已经足够了。其实我也希望能详细一点,不过我是常客,个人不太喜欢用Xpath。如果你真的想深入了解 Xpth,我建议你去 W3C Xpath 教程 >>> 看看他们是如何使用它的。

  好了,今天就到这里,我是康纳,一个从零开始的技术菜鸟。不知道你今天收获了多少?? ? 下次见!

  学习一时爽,学习永远爽!

  系列文章连接:

  Python爬虫十六种形式——第一种形式:HTTP协议>>>

  Python爬虫十六式二:urllib和urllib3 >>>

  Python爬虫十六式-第三式:Requests的用法>>>

  Python爬虫十六-五:BeautifulSoup,美味的汤>>>

  Python爬虫十六式六:JQuery的假兄弟-pyquery >>>

  Python爬虫十六式七:正则美术>>>

  Python爬虫十六式——第八式:实例分析——全书网>>>

  转载于:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线