学爬虫不会xpath解析数据?

今天老师带你一堂课带你从零开始精通xpath,从此轻松提取网页信息。

我们在爬虫的过程中,经常会遇到html字符串数据,很多我们需要的数据不是作为标签的文本就是作标签的属性值那么这些隐藏在标签中我们需要的数据可以通过xpath语法给解析出来

PS:如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的吗?说不定你学了可能是两年前人家就学过的内容,在这小编分享一波2020最新的Python教程。获取方式,私信小编 “ 资料 ”,即可免费获取哦!

环境介绍:

python 3.6

pycharm

parsel(xpath)

爬虫数据解析的方法

正则表达式

使用场景:数据量相对较少,或者你要提取的诗句类型单一

转没人能用于从字符串里面提取数据

CSS选择器

使用场景:适合在HTML标签当中进行提取数据

css是叠层样示表,专门用于控制网页的颜色、样式与动画。而css选择器就是专门用来选择HTML的标签,进而进行数据提取

xpath

使用场景:合适在HTML标签当中进行数据提取

路径选择器,最早是提取xml文件,因为简单易学,在提取网页方面应用比较多

xpath中节点之间的关系

节点是什么东西?

每个html的标签我们都称之为节点。(根节点、子节点、同级节点)

xpath语法

xpath使用路径表达式来选取xml文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似

表达式

| nodename | :选中该元素。

| / | :从根节点选取、或者是元素和元素间的过渡。

| // | :从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。跨节点获取标签

| . |: 选取当前节点。

| .. | :选取当前节点的父节点。

| @ |: 选取属性。

| text() | :选取文本。

选取未知节点

| * | :匹配任何元素节点。

| @* | :匹配任何属性节点。

| node() |: 匹配任何类型的节点。

| /div/* | :选取 div元素的所有子元素。

| //* | :选取文档中的所有元素。

| //title[@*] |: 选取所有带有属性的 title 元素。

案例

str --> Selector对象 具有xpath方法 提取到的数据返回一个列表

import parsel
html_str = """
<div>
<ul>
<li class="item-1">
<a href="link1.html">第一个</a>
</li> <li class="item-2">
<a href="link2.html">第二个</a>
</li> <li class="item-3">
<a href="link3.html">第三个</a>
</li> <li class="item-4">
<a href="link4.html">第四个</a>
</li> <li class="item-5">
<a href="link5.html">第五个</a>
</li>
</ul>
</div>
"""
 

1、转换数据类型

data = parsel.Selector(html_str).extract()  # parsel能够把缺失的html标签补充完成
data = parsel.Selector(html_str) # parsel能够把缺失的html标签补充完成

2、解析数据--list类型

print(data)

2、1 从根节点开始,获取所有<a>标签

result = data.xpath('/html/body/div/ul/li/a').extract()

2、2 跨节点获取所有<a>标签

result = data.xpath('//a').extract()

2、3 选取当前节点 使用场景:需要对选取的标签的下一级标签进行多次提取

result = data.xpath('//ul')
result2 = result.xpath('./li').extract() # 提取当前节点下的<li>标签
result3 = result.xpath('./li/a').extract() # 提取当前节点下的<a>标签
 

2、4 选取当前节点的父节点,获取父节点的class属性值

result = data.xpath('//a')
result4 = result.xpath('../@class').extract()

2、5 获取第三个<li>标签的节点(两种方法)

result = data.xpath('//li[3]').extract()
result = data.xpath('//li')[2].extract()

2、6 通过定位属性的方法获取第四个<a>标签

result = data.xpath('//a[@href="link4.html"]').extract()

2、7 用属性定位标签,获取第四个<a>标签包裹的文本内容

result = data.xpath('//a[@href="link4.html"]/text()').extract()

2、8 获取第五个<a>标签的href属性值

result = data.xpath('//li[5]/a/@href').extract()

了解 模糊查询

result = data.xpath('//li[contains(@class,"it")]').extract()

同时获取<li>标签的属性以及<a>标签的文本

 result = data.xpath('//li/@class|//a/text()').extract()

总结

1. xpath的概述XPath (XML Path Language),解析查找提取信息的语言

2. xpath的节点关系:根节点,子节点,同级节点

3. xpath的重点语法获取任意节点:`//`

4. xpath的重点语法根据属性获取节点:`标签[@属性 = '值']`

5. xpath中获取节点的文本:`text()`

6. xpath的获取节点属性值:`@属性名`

 

一篇文章掌握网页解析神器——xpath的更多相关文章

  1. 网页解析库-Xpath语法

    网页解析库 简介 除了正则表达式外,还有其他方便快捷的页面解析工具 如:lxml (xpath语法) bs4 pyquery等 Xpath 全称XML Path Language, 即XML路径语言, ...

  2. 网页解析:Xpath 与 BeautifulSoup

    1. Xpath 1.1 Xpath 简介 1.2 Xpath 使用案例 2. BeautifulSoup 2.1 BeautifulSoup 简介 2.2 BeautifulSoup 使用案例 1) ...

  3. 关于爬虫中常见的两个网页解析工具的分析 —— lxml / xpath 与 bs4 / BeautifulSoup

    http://www.cnblogs.com/binye-typing/p/6656595.html 读者可能会奇怪我标题怎么理成这个鬼样子,主要是单单写 lxml 与 bs4 这两个 py 模块名可 ...

  4. 【XPath Helper:chrome爬虫网页解析工具 Chrome插件】XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插件网

    [XPath Helper:chrome爬虫网页解析工具 Chrome插件]XPath Helper:chrome爬虫网页解析工具 Chrome插件下载_教程_安装 - 开发者插件 - Chrome插 ...

  5. 一篇文章带你了解网页框架——Vue简单入门

    一篇文章带你了解网页框架--Vue简单入门 这篇文章将会介绍我们前端入门级别的框架--Vue的简单使用 如果你以后想从事后端程序员,又想要稍微了解前端框架知识,那么这篇文章或许可以给你带来帮助 温馨提 ...

  6. 第6章 网页解析器和BeautifulSoup第三方插件

    第一节 网页解析器简介作用:从网页中提取有价值数据的工具python有哪几种网页解析器?其实就是解析HTML页面正则表达式:模糊匹配结构化解析-DOM树:html.parserBeautiful So ...

  7. 爬虫的两种解析方式 xpath和bs4

    1.xpath解析 from lxml import etree 两种方式使用:将html文档变成一个对象,然后调用对象的方法去查找指定的节点 (1)本地文件 tree = etree.parse(文 ...

  8. 一篇文章教会你利用Python网络爬虫获取电影天堂视频下载链接

    [一.项目背景] 相信大家都有一种头疼的体验,要下载电影特别费劲,对吧?要一部一部的下载,而且不能直观的知道最近电影更新的状态. 今天小编以电影天堂为例,带大家更直观的去看自己喜欢的电影,并且下载下来 ...

  9. 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚

    还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...

随机推荐

  1. [noip模拟]B<构造>

    [题目描述] 在两个n*m的网格上染色,每个网格中被染色的格子必须是一个四联通块(没有任何格子被染色也可以),四联通块是指所有染了色的格子可以通过网格的边联通,现在给出哪些格子在两个网格上都被染色了, ...

  2. 1642: 【USACO】Payback(还债)

    1642: [USACO]Payback(还债) 时间限制: 1 Sec 内存限制: 64 MB 提交: 190 解决: 95 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 &quo ...

  3. P1203 [USACO1.1]Broken Necklace(模拟-枚举)

    P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 ...

  4. hello world: 我的博客写作思路

    1. 本人计算机专业,研究生刚毕业,即将入职金融科技领域,决定借博客园平台写自己的博客,原因如下: 从小白到大白,离不开各大学习平台和技术博客的指导和分享,是时候回馈了. 借此机会整理自己从本科.研究 ...

  5. 《Three.js 入门指南》3.1.2 - 一份整齐的代码结构以及使用ORBIT CONTROLS插件(轨道控制)实现模型控制

    3.1.2 正式代码结构 & ORBIT CONTROLS插件(轨道控制) 说明 本节内容属于插入节,<Three.js入门指南>这本书中,只是简单的介绍了一些概念,是一本基础的入 ...

  6. 1098 Insertion or Heap Sort (25分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  7. PHP常用设计模式,PHP常用设计模式详解,PHP详解设计模式,PHP设计模式

    PHP常用设计模式详解 单例模式: php交流群:159789818 特性:单例类只能有一个实例 类内__construct构造函数私有化,防止new实例 类内__clone私有化,防止复制对象 设置 ...

  8. 搭建mariadb数据库系统《一》

                                                                     搭建mariadb数据库系统 案例3:搭建mariadb数据库系统 3 ...

  9. C语言一行语句太长的换行处理方法

    [toc] 1.C语言中代码的多行书写 对C语言初学者来说,编写的程序的功能很简单,一句代码很短,但是在实际开发中,参数往往很长很多,一句代码可能会很长,需要用多行才能书写. 如果我们在一行代码的行尾 ...

  10. docker、docker-compose安装,卸载

    docker win10安装 一.安装 https://www.docker.com/docker-windows 二.设置 控制面板-->程序-->Hyper-V linux安装: ht ...