欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 爬虫XPath相关

爬虫XPath相关

2025/9/21 20:07:55 来源:https://blog.csdn.net/Wzasty/article/details/144108028  浏览:    关键词:爬虫XPath相关

朋友问我有关爬虫代码中xpath的相关问题,没系统学过Python,小学了一下做了一些整理,如有错误欢迎交流!

例3.5

她问我的问题是,横线划出来的地方是怎么得来的?(好问题!)

首先,对于这里的'//span[@class="appellation"]',它实际上是通过查看页面的源代码(HTML结构)得来的。是你想要获取网页内的某些信息,然后通过查看源代码后编写相应XPath表达式从而获取它。

这是网页爬取中常用的一个步骤。以下是具体的过程:

1. 查看页面源代码

在浏览器中查看网页的HTML源代码来确定目标数据的结构和特征。具体步骤如下:

步骤 1:打开目标网页

在浏览器中访问目标网页(代码中给出的URL)。

是这样的。

步骤 2:查看网页源代码

在网页上右键,然后选择查看页面源代码。过程如下:

点击后就会跳转到页面源代码。

步骤 3:找到目标信息

在源码中往下翻,比如你想获取这篇文章的来源和作者,在代码中它是上面这张图中的样子。

2. 确定信息的HTML特征

通过分析HTML结构,可以发现:

来源和作者都在<span>标签中。

这些<span>标签都带有class="appellation"属性。

从而:

要提取来源和作者,我们需要找出所有<span>标签,且其class属性为"appellation"。

3. 编写XPath表达式

根据HTML结构,设计对应的XPath表达式来定位目标信息。

XPath的生成逻辑如下:

//span: 查找所有的<span>标签。

[@class="appellation"]: 筛选出class属性值为"appellation"的<span>标签。

组合在一起://span[@class="appellation"]

上面这段XPath表达式会匹配到两段<span>标签,分别是:

<span class="appellation">来源:《求是》2019/01</span>

<span class="appellation">作者:黄坤明</span>

然后,details就 = [

    "来源:《求是》2019/01",

    "作者:黄坤明"

]

details[0].text:获取第一段文本内容,即 "来源:《求是》2019/01";

details[1].text:获取第二段文本内容,即 "作者:黄坤明"。

最后打印输出结果就是:

来源:《求是》2019/01

作者:黄坤明

3.6

跟前一个例子的步骤一样我们打开这个网页以及它的源代码,现在我们想要获取网页上所有书的书名。

分步解析 //ul[@id="div"]/li/a/@title

//ul:查找文档中所有<ul>标签。

[@id="div"]:筛选出id属性等于"div"的<ul>标签。即定位到下面这种结构:

在页面源代码中即这里:

/li:从<ul>标签中查找直接子节点<li>,每个<li>对应一条书籍信息。

/a:查找<li>中的<a>标签。这个<a>是链接标签,包含书籍标题和链接地址。

/@title:提取<a>标签的title属性内容。title属性里就是我们想要的书名。

最终匹配得到的titles数组就是下面这样的。

[

    "【书评】早面积累优势区域开放放大的上扬保障",

    "从服务生产力中审视中国产业结构转型路径",

    ...

]

最终的输出就是所有书名:

【书评】早面积累优势区域开放放大的上扬保障

从服务生产力中审视中国产业结构转型路径

...

扩充

你可能还会想问:

刚刚的//span[@class="appellation"]和现在的//ul[@id="div"]/li/a/@title,它们的格式是怎么样的,怎么一会有两个/一会只有一个/,一会是/一会是中括号[],还有@,这些都是什么?

下面有一个总表可以看一下:

比如 /(单斜杠)表示从当前节点开始,查找直接子节点。

例如 /html/body/ul表示查找html下的body,再查找body的直接子节点ul。

//(双斜杠)表示从当前节点开始,查找所有后代节点(不限层级)。

例如 //ul表示从文档的任意位置开始,查找所有的<ul>标签。

中括号[]用于筛选节点,指定某些条件或属性值。

例如 //ul表示查找所有<ul>标签。而 //ul[@id="div"]表示只查找id属性等于"div"的<ul>标签。

@用于访问节点的属性。

例如 //a表示查找所有<a>标签。而 //a/@href表示查找所有<a>标签的href属性值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词