xpath获取标签的属性值_爬虫必备技能之网页解析库:xpath用法和实战

环境配置

1.本文使用的python版本是python3

2.使用到的依赖包如下:

requestsscrapy

在安装 scrapy 之前需要先安装 Twisted 地址: https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted。下载符合自己版本的 Twisted,然后将其放入 python 安装目录中,先使用命令安装 pip install Twisted。安装完之后,scrapy 就很容易安装了,安装命令如下: pip install scrapy

5f33c4226142c40037962bd3d04ece5e.png

本文要点

1.xpath 基本语法和用法示例

2.使用 xpath 爬取《盗墓笔记》实例

xpath 基本语法

xpath,全称 XML Path Language,即 XML 路径语言,它是一门在 XML 文档中查找信息的语言。xpath 的选择功能十分强大,它提供了非常简洁明了的路径选择表达式,几乎所有我们想要定位的节点都可以用 xpath 来选择。首先我们来看下 xpath 的基本语法。

cfbf592365b1e02e5348fed38f7662e5.png ffb4b30da79e0422a2c83d0c78bf824e.png

在这里列出了xpath的常用匹配规则,例如 / 代表选取直接子节点,// 代表选择所有子孙节点,. 代表选取当前节点,.. 代表选取当前节点的父节点,@ 则是加了属性的限定,选取匹配属性的特定节点。

xpath 用法举例

接下来我们以豆瓣电影为例子,来熟悉一下 xpath 基本用法:
打开网页 https://movie.douban.com/top250

34edd405ca646d020b5864ac2790b9cd.png豆瓣电影top250
首先需要找到我们所匹配的内容在 html 中的位置。
从图片中可以看到排名第一的电影标题是在标签为 div,class 属性为 *hd中的 a 标签中所有的 span 标签里面!
然后我们需要一级一级往上面找,因为这个层级太深了,有时候会匹配不到我们所需要的内容。
我们最开始匹配的标签要满足它的所有特征加起来是唯一的。
很容易看到属性为 article 正是我们所需要的标签!因为找不到第二个 div 标签且 class 属性为 article 的标签! 因为是文本内容,所以要用 text(),获取电影标题语法如下 :
1html.xpath(

同理,我们获取电影详情链接的语法,因为是属性,所以要用 @属性值

1html.xpath(

我们可以将其加入到爬虫代码中,效果如下:

dbd851e6cd5718dca30dcc13d31bf82d.png豆瓣电影爬虫

使用 xpath 爬取盗墓笔记

目标地址:
盗墓笔记全篇 http://seputu.com/

总体思路:

1.分析网页结构,取出我们需要的标题,以及下一步需要用到的链接
2.根据章节的链接地址,再爬取出章节小说

首先分析我们需要爬取的内容,在网页中的位置。

fa904fcd885796241b3ccf17dcd28045.png

经过上面的讲解,相信大家很容易就可以写出 xpath 的语法。因为我们是要爬取所有小说内容,所以我们要循环所有 li 标签里面的内容!

1html.xpath(

遍历这个列表,取出我们所需要的章节,详细链接

1li_list = selector.xpath(

接下来,从详情链接中取出小说内容,即完成了这个小爬虫!

c6aa111c3ae3f866426aa73f6414116b.png
1p_list = selector.xpath(

最重要的分析部分完成了,接下来主要就是将所有的内容放入代码中,然后保存到本地就完成了。

c0b4901111732593ba935458325a469a.png
最终爬虫代码如下:
 1

总结

本文主要介绍了 python 中解析库 xpath 的使用方法和示例,用法其实很简单,关键在于多多练习!下篇文章打算分享另一个解析库 css 的用法,以及和 xpath 之间的区别,欢迎关注!


如果觉得不错或对你有帮助,请分享给更多人

关注[Python编程与实战]

从零开始学Python,提升Python技能

231e9f322be137ae2eb0cea6533ca050.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JsoupXpath 是一款纯Java开发的使用xpath解析html的解析器,xpath语法分析与执行完全独立,html的DOM树生成借助Jsoup,故命名为JsoupXpath.为了在java里也享受xpath的强大与方便但又苦于找不到一款足够强大的xpath解析器,故开发了JsoupXpath。JsoupXpath的实现逻辑清晰,扩展方便,支持几乎全部常用的xpath语法.http://www.cnblogs.com/ 为例 "//a/@href"; "//div[@id='paging_block']/div/a[text()='Next >']/@href"; "//div[@id='paging_block']/div/a[text()*='Next']/@href"; "//h1/text()"; "//h1/allText()"; "//h1//text()"; "//div/a"; "//div[@id='post_list']/div[position()1000]/div/h3/allText()"; //轴支持 "//div[@id='post_list']/div[self::div/div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()"; "//div[@id='post_list']/div[2]/div/p/preceding-sibling::h3/allText()|//div[@id='post_list']/div[1]/div/h3/allText()"; 在这里暂不列出框架间的对比了,但我相信,你们用了会发现JsoupXpath就是目前市面上最强大的的Xpath解析器。 快速开始 如果不方便使用maven,可以直接使用lib下的依赖包跑起来试试,如方便可直接使用如下dependency(已经上传至中央maven,最新版本0.1.1):    cn.wanghaomiao    JsoupXpath    0.1.1 依赖配置好后,就可以使用如下例子进行体验了!String xpath="//div[@id='post_list']/div[./div/div/span[@class='article_view']/a/num()>1000]/div/h3/allText()";String doc = "..."; JXDocument jxDocument = new JXDocument(doc); List<Object> rs = jxDocument.sel(xpath); for (Object o:rs){     if (o instanceof Element){             int index = ((Element) o).siblingIndex();             System.out.println(index);     }     System.out.println(o.toString()); } 其他可以参考 cn.wanghaomiao.example包下的例子 语法 支持标准xpath语法(支持谓语嵌套),支持全部常用函数,支持全部常用轴,去掉了一些标准里面华而不实的函数和轴,下面会具体介绍。语法可以参考http://www.w3school.com.cn/xpath/index.asp 关于使用Xpath的一些注意事项 非常不建议直接粘贴Firefox或chrome里生成的Xpa

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值