数据采集—XPath抽取网页数据

XPath抽取网页数据

XML

是什么
  1. 可扩展标记语言
  2. 用来传输和存储数据
用途
  1. XHTML
  2. 用于描述可用的web服务的WSDL
  3. 作为手持设备的标记语言的WAP和WML
  4. 用于新闻feed的RSS语言
  5. 描述资本和本体的RDF和OWL
  6. 用于描述针对web的多媒体的SMIL
语法规则
  1. 所有XML元素都必须有关闭标签

  2. XML标签对大小写敏感

  3. XML必须正确地嵌套

  4. XML文档必须有根元素

  5. XML的属性必须加引号

  6. 实体引用(实体引用的分号和字母间没有空格)

    1. &lt; < 小于
    2. &gt; > 大于
    3. &amp; & 和
    4. &apos; ’ 单引号
    5. &quot; " 引号
  7. XML中的注释与HTML相似

    <!-- -->

  8. 在XML中,空格会被保留

  9. XML以LF存储换行

元素

XML 元素指的是从(且包括)开始标签直到(且包括)结束标签的部分。

一个元素可以有一个(其他元素、文本、属性)或多个(其他元素、文本、属性)。

XML标签命名规则
  1. 可包含字母、数字和符号
  2. 不能以数字或者标点符号开始
  3. 不能以一切xml字样(大小写)开始
  4. 不能包含空格
XML属性
  1. 提供元素的额外信息
  2. 属性值必须加引号
    1. 如果属性值中有双引号必须用单引号包裹
    2. 也可以用实体引用

XPath

概念

xpath是一种查询语言,也称XML路径语言,能够在XML和HTML中寻找节点,确定某部分在文档中的位置。

  1. Xpath是一门在XML文档中查找信息的语言
  2. xpath是XSLT中的主要元素
  3. xquery和xpointer均构建于xpath表达式之上
节点

节点有七种类型:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点

基本值

没有父节点或子节点的节点

项目

项目是基本值或者节点

节点关系

父节点

每个元素以及属性都有一个父节点

子节点

每个元素可以有不定个数的子节点

兄弟节点

拥有相同的父节点

先辈节点

某节点的父节点、父节点的父节点……

后代节点

某节点的子节点、子节点的子节点……

在python下的安装

Ubuntu

sudo apt-get install python-lxml

windows

安装方法多样

pycharm直接搜索安装

cmd中pip install lxml

本地安装,在https://pypi.org/search/网页搜索lxml,下载后缀为whl的文件,cmd中执行pip install xxx.whl

xpath语法

nodename 选取此节点 (第一个节点)的所有节点

/ 从根节点选取

// 跳过多个标签选取

. 选取当前节点

.. 选取当前节点的父节点

@ 选取属性

* 匹配任何元素

@* 匹配任何属性节点

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

xpath谓语

谓语用来查找某个特定区域的节点或者包含某个指定的值的节点。

/node[1] 选取第一个node

/node[last()] 选取最后一个node

/node[last()-1] 选取倒数第二个node

/node[position() < 3] 选取最前面的两个node

//title[@lang] 选取标签是title,带有属性lang的节点

//title[@lang=‘eng’] 选取标签是title,带有属性lang,且其值为eng的节点

xpath运算符

| 计算两个节点集

+ 加法

- 减法

* 乘法

div 除法

= 等于

!= 不等于

< 小于

<= 小于等于

> 大于

>= 大于等于

or

and

mod 取余

xpath功能函数

starts-with //nodename[starts-with(@str1,str2)] 选取节点的str1属性以str2开头的节点

contains //nodename[contains(@str1,str2) ] 选取str1属性是以str2开头的节点

text() //div[@id = ‘str’]/text() 选取文本内容

xpath案例

爬取糗事百科https://www.qiushibaike.com/8hr/page/的标题

准备

  1. python已经安装lxml

    导入lxml不出错,表明已经安装成功
    img

  2. 浏览器中安装一个xpath插件

    浏览器扩展中心安装,并查看说明,找到快捷键img

网页样式
img


分析网页源码

F12打开开发者模式,点击 “在页面中选择一个元素已进行检查功能”或者Ctrl+Shift+C开启此功能。
img

指针移到标题位置,并点击。
img

开发者模式的元素以跳到该文本所在的位置。

img

依次叠起标签可发现所有标题在li标签中的一个a标签里。

img

打开浏览器中的xpath插件img

编写xpath匹配规则,不断尝试,找到一个匹配规则。img

编写python程序

xpath_html = etree.HTML(str(li))
title = xpath_html.xpath("//a[@class='recmd-content']/text()")

值得注意的是,xpath在lxml中的etree包中。

匹配结果是个列表,遍历列表打印并输出到文件。
img

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loftiest

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值