两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案

数据采集习题参考答案,会持续更新,点个关注防丢失。为了方便寻找,按照头歌的门类从新整理了实训的分类,朋友们记得看标题哦,按标题寻找! 该篇为爬虫知识储备!

文章目录

实训一:HTML基础

第一关:初识HTML:简单的Hello World网页制作

第一关答案 

第二关:HTML结构:自我简介网页 

第二关答案 

实训二:HTML文本

第一关:HTML链接:带超链接的网页

第一关答案 

第二关:HTML标题与段落:网络文章网页

第二关答案 

第三关:HTML表格:日常消费账单表格展示网页

 第三关答案

实训三:HTML——基本标签

第一关创建第一个 HTML 标签

第一关答案 

第二关:创建 <h1>-<h6>

第二关答案 

第三关创建 p 标签

第三关答案 

第四关创建 a 标签

第四关答案 

第五关创建 img 标签

第五关答案 

第六关创建 div 标签

第六关答案 

第七关添加注释

第七关答案 

实训四:HTTP基础

第一关HTTP 标准

第一关答案 

第二关开发者工具的基本使用

第二关答案

实训五:Python——JSON基础 

第一关JSON篇:JSON基础知识

第一关答案 

第二关JSON篇:使用json库

实训六:Python——XPath基础 

第一关:XPath 路径表达式

第一关答案

第二关:XPath 轴定位

第二关答案

第三关:XPath 解析

第三关答案



HTML(Hypertext Markup Language,超文本标记语言)是一种用于创建Web页面和Web应用的标准化标记语言。在CSS(Cascading Style Sheets,级联样式表单)和JavaScript的帮助下,HTML已经成功构建了一整套面向Web的开发与应用平台。

1995HTML2.0面世,HTML陆续推出了得到广泛应用的HTML3.2HTML4.0标准,2014HTML5标准的面世使其在多媒体和移动性方面得到了全面提升,使HTML迎来了新的爆发式发展。

本习题面向零基础、入门级的Web技术学员,将介绍HTML的基本概念和结构,体验一个简单的Hello World网页制作过程,以及一个相对完整的Web页面的制作过程。

实训一:HTML基础

第一关:初识HTML:简单的Hello World网页制作

本关的任务是编写一个简单的HTML页面,这个网页包含一个标题和一个段落。显示效果如下:

预览大图

HTML是一种标准化的标记语⾔,由一套标记标签(markup tag)组成。Web前端开发人员的一项主要工作就是利用HTML标签来编写⽹页,将文本、超链接、图片、语音、视频等各种内容整合起来,实现绚丽多姿的网页。

下面是大家需要记住的关于HTML的一些基本描述:

  • HTML标记标签,通常简称HTML标签;

  • HTML文档,通常简称HTML页面、网页等;

  • HTML5能够较好的兼容HTML之前版本,但也废弃了一些旧的HTML特性。

  • <html></html><body></body><h1><p>等都是HTML标签;

  • <h1>这是一个一级标题</h1><p>这是第1个段落。</p>等都是HTML元素;

  • bgcolor="yellow"align="center"都是HTML元素的属性。

第一关答案 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>Hello World</title></head>  <!--------- Begin--------><body bgcolor='F6F3D6'><!Hello World!--><h1 align ='center'>Hello World</h1><p align ='center'>动手改变世界</p></body><!--------- End--------></html>

第二关:HTML结构:自我简介网页 

本关任务是编写一个自我简介网页,你将通过本任务理解一个HTML网页的完整结构,并了解如何让搜索引擎更好的找到你的网页。

显示效果如下图所示:

预览大图

根元素:HTML 元素

然后,<HTML>元素告知浏览器其本身是一个HTML文档。

除去第一行外,其余的页面内容都应该包含在<HTML>元素中,所以它也被称为根元素。

头元素:head 元素

与属性会给元素增添附加信息一样,head元素能为整个网页增添更多信息。可以用在head中的标签有<base>, <link>, <meta>, <script>, <style>, 以及 <title>。在之后的学习中,你将逐渐的了解它们。

网页标题元素:title

本例网页主要内容是“自我简介”,所以title也设置为“自我简介”。 title元素的内容即网页标题,它是一个网页必需的元素之一。

<title>的内容一般作为网页标签名,写法如下:

<title>标题内容</title>

第二关答案 

<!DOCTYPE html>
<html><!--------- Begin--------><head><title>自我简介</title><meta charset="utf-8"><meta name="description" content="彭智广的自我简介网站"><meta name="keywords" content="自我简介,姓名,学号,班级"></head><body><h1 align="center">自我简介</h1><h2>简介</h2><p>在这里简单的描述一下你自己吧。</p><h2>三个与你最有关的词</h2><p>这三个词可以是一种形容,也可以是一种运动或者是一种独特的爱好,等等。</p><ul><li>第一个词</li><p>选择第一个词的原因</p><li>第二个词</li><p>选择第二个词的原因</p><li>第三个词</li><p>选择第三个词的原因</p></ul>
</body><!--------- End--------></html>

实训二:HTML文本

第一关:HTML链接:带超链接的网页

本关的任务是编写一个带超链接的HTML页面,链接包含页面内导航链接和跳转其他网页的链接。显示效果如下:

预览大图

超链接是网页互连的核心,网页之间通过超链接连接在一起。

我们使用<a> 标签定义超链接。

一个简单的例子如下:

<a href="https://baidu.com">百度搜索</a>

点击a元素内容后打开百度搜索网页。

其中,href属性指定了超链接的目标,本例中即跳转到百度。

属性

href 属性

href 属性是超链接最重要的属性,它用于指定超链接目标的 URL。

典型的超链接格式如下:

<a href="URL">

其中,目标URL有三种类型:

  1. URL (anchor URL):指向同一页面内某一位置;

  2. 相对 URL (relative URL):指向同一网站的不同文件;

  3. 绝对 URL (absolute URL):指向另一个网站。

提示:

  • URLUniform Resource Locator,统一资源定位器;

  • 为什么叫作锚URL呢?

的含义取于船上的锚,船把锚沉在水底后,如果船随水飘移了,只要一拉锚的锁链就会回到抛锚的位置。同样的,在html中点锚链接就能回到指定位置。

第一关答案 

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>HTML链接</title><meta name="description" content="HTML链接知识讲解"><meta name="keywords" content="HTML, Link">
</head><!--------- Begin--------><body><h1>HTML 入门</h1><h2>本页目录</h2><ul><li><a href="#toc1">简介</a></li><li><a href="https://en.wikipedia.org/wiki/CSS">第1关</a></li><li><a href="#toc3">第2关</a></li></ul><h2 id="#toc3">简介</h2><p><a href="https://en.wikipedia.org/wiki/HTML"target="_blank"HTML</a>(Hypertext Markup Language,超文本标记语言)是一种用于创建Web页面和Web应用的标准化标记语言。在<a href="https://en.wikipedia.org/wiki/CSS"target="_blank">CSS</a>(Cascading Style Sheets,级联样式表单)和<a href="#toc3"target="_blank">JavaScript</a>的帮助下,HTML已经成功构建了一整套面向Web的开发与应用平台。</p><p>自1995年HTML2.0面世,HTML陆续推出了得到广泛应用的HTML3.2和HTML4.0标准,2014年HTML5标准的面世使其在多媒体和移动性方面得到了全面提升,使HTML迎来了新的爆发式发展。</p><h2 id="toc2">第1关</h2><p>初识HTML:简单的Hello World网页</p><h2 id="toc3">第2关</h2><p>HTML链接:带超链接的网页</p><hr><p>若需帮助,请发送问题到<a href="mailto:someone@email.com">E-Mail</a>。</p><p><a href="#">回到顶部</a></p>
</body><!--------- End--------></html>

第二关:HTML标题与段落:网络文章网页

本关任务是完成一个格式丰富的文章网页,你将通过本关学习标题、段落、文本格式化和引用等,与文本相关的标签。

本关网页显示效果如下图所示:

预览大图

HTML提供了六级标题用于创建网页信息的层级关系。<h1> 定义重要等级最高的标题,之后<h2><h6>层级依次递减。

  1. <body>
  2. <h1>书籍标题</h1>
  3. <h2>第一章</h2>
  4. <h3>第一节</h3>
  5. <h4>重点 1</h4>
  6. <h5>1.1 标题</h5>
  7. <h6>1.1.1 标题</h6>
  8. </body>

第二关答案 

<!DOCTYPE html><head><meta charset="UTF-8" /><title>HTML – 维基百科</title>
</head><!--------- Begin--------><body><h1>HTML</h1><p>超文本标记语言(HTML)是一种标准化的用来创建Web页面和Web应用的标准化的<a href="https://en.wikipedia.org/wiki/Markup_language" title="Markup language" target="_blank">标记语言</a>。 在级联样式表单(CSS)和JavaScript的帮助下,HTML已经成功构建了一整套面向Web的开发与应用平台<sup><a href="#ref1">[1]</a></sup>。</p><h2>历史</h2><h3>开发过程</h3><p>1980年,物理学家<a href="https://en.wikipedia.org/wiki/Tim_Berners-Lee" title="Tim Berners-Lee" target="_blank">Tim Berners-Lee</a>,<a href="https://en.wikipedia.org/wiki/CERN" title="CERN" target="_blank">CERN</a>的一位项目负责人,提出并实现了<a href="https://en.wikipedia.org/wiki/ENQUIRE" title="ENQUIRE" target="_blank">ENQUIRE</a>系统。该系统的目的是为CERN研究人员提供一种使用和分享文档。1989年, Berners-Lee写了一个备忘录,提出了基于Internet-based<strong>超文本系统</strong><sup><a href="#ref2">[2]</a></sup>。</p><h3>HTML里程碑</h3><dl><dt>1995年11月24日</dt><dd>HTML2.0发布,对应的IETF文档为<a class="external mw-magiclink-rfc" rel="nofollow" href="https://tools.ietf.org/html/rfc1866" target="_blank">RFC 1866</a>。</dd><dt>1997年1月14日</dt><dd>HTML 3.2以<a href="https://en.wikipedia.org/wiki/W3C_Recommendation" class="mw-redirect" title="W3C Recommendation" target="_blank"><abbr title="World Wide Web Consortium">W3C</abbr>推荐标准</a>的形式发布。 随后的HTML标准都由W3C组织发布。</dd><dt>1997年12月18日</dt><dd>HTML 4.0发布<sup><a href="#ref3">[3]</a></sup>。</dd><dt>2014年10月28日</dt><dd>HTML5 发布。</dd><dt>2016年11月1日</dt><dd>HTML 5.1发布。</dd></dl><h2>参考文献</h2><ol><small><li id='ref1'>Flanagan, David. <i>JavaScript - The definitive guide</i> (6 ed.). p.&#160;1. "JavaScript is part of the triad of technologies that all Web developers must learn: HTML to specify the content of web pages, CSS to specify the presentation of web pages, and JavaScript to specify the behaviour of web pages."</li><li id="ref2">Tim Berners-Lee, "Information Management: A Proposal." CERN (March 1989, May 1990). </li><li id="ref3">"HTML 4.0 Specification — W3C Recommendation — Conformance: requirements and recommendations". World Wide Web Consortium. December 18, 1997. Retrieved July 6, 2015.</li></small></ol>
</body><!--------- End--------></html>

第三关:HTML表格:日常消费账单表格展示网页

本关任务是编写一个日常消费账单表格展示网页,你将通过本关学习如何使用HTML编写出简洁清晰的表格。

本关网页显示效果如下图所示:

预览大图

HTML表中,一个表格(table)由行(tr)组成,每一行由单元格组成,单元格有标题单元格(th)和数据单元格(td)

  1. 我们设定了<table>元素的width属性,改变了表格的宽度;

  2. 我们使用<caption>元素设置了表格的标题;

  3. 数据第一行<tr>元素中,使用<th>元素指定了表头。本例中有三列信息,所以包含了三个<th>元素;

  4. 并且,我们设置了<th>元素的属性scope的值为col

 第三关答案

<!DOCTYPE html>
<html><!--------- Begin--------><head><meta charset="utf-8"><title>HTML表格</title><meta name="description" content="HTML表格知识讲解"><meta name="keywords" content="HTML,表格, Table"><style type="text/css">table {border-collapse: collapse;}caption {font-weight: bold;margin-bottom: .5em;}th,td {padding: .5em .75em;border: 1px solid #000;}tfoot {font-weight: bold;}</style>
</head><body><table  width="400" border="1" style="margin:auto"><caption>日常消费账单</caption><thead><!-- 表格头部 --><tr><th align="left" scope=co1>消费项目</th><th align="right" scope=co1>一月</th><th align="right" scope=co1>二月</th></tr></thead><tbody><!-- 表格主体 --><tr><th align="left" scope="row">食品烟酒</th><td align="right">¥1241.00</td><td align="right">¥1250.00</td></tr><tr><th align="left" scope="row">衣物</th><td align="right">¥330.00</td><td align="right">¥594.00</td></tr><tr><th align="left" scope="row">居住</th><td align="right">¥2100</td><td align="right">¥2100</td></tr><tr><th align="left" scope="row">生活用品及服务</th><td align="right">¥700.00</td><td align="right">¥650.00</td></tr><tr><th align="left" scope="row">医疗保健</th><td align="right">¥150.00</td><td align="right">¥50.00</td></tr><tr><th align="left" scope="row">教育、文化和娱乐</th><td align="right">¥1030.00</td><td align="right">¥1250.00</td></tr><tr><th align="left" scope="row">交通和通信</th><td align="right">¥230.00</td><td align="right">¥650.00</td></tr><tr><th align="left" scope="row">其他用品和服务</th><td align="right">¥130.40</td><td align="right">¥150.00</td></tr></tbody><tfoot><!-- 表格尾部 --><tr><th align="left" scope="row">总计</th><th align="right">¥5911</th><th align="right">¥6694</th></tr></tfoot></table>
</body><!--------- End--------></html>

实训三:HTML——基本标签

第一关创建第一个 HTML 标签

本关任务:创建你的第一个标签<h1></h1>,文本内容为welcome to Educoder

实现的效果如下:

预览大图

<h1>welcome</h1>

上面这行代码它表示一个HTML元素

大多数 HTML 元素都是由开始标签结束标签组成的,通常成对出现 。

开始标签:用尖括号<>包裹关键词,像<h1>这样。 结束标签:用</>包裹和开始标签一样的关键词,像</h1>这样。

可以发现: 结束标签就比开始标签多了一个斜杠/

第一关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><h1>welcome to Educoder</h1><!-- ********* Begin ********* --><!-- ********* End ********* -->
</body>
</html>

第二关:创建 <h2>-<h6> 标签

本关任务:依次创建<h2>-<h6>标签,文本内容为创建不同字体大小的标题,查看它们的区别。

实现的效果如下:

预览大图

第一关已经创建了h1标签,它是干什么的呢? 它一般用来创建标题

另外,<h2>也用来创建标题,它们有什么区别呢? h1的字体比h2的字体要

当然, h3h4h5h6也用来创建标题,它们的字体依次减小。

注意:创建标题只有 <h1> - <h6>,没有 h7h8的。

第二关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><h1>创建不同字体大小的标题</h1><!-- ********* Begin ********* --><h2>创建不同字体大小的标题</h2><h3>创建不同字体大小的标题</h3><h4>创建不同字体大小的标题</h4><h5>创建不同字体大小的标题</h5><h6>创建不同字体大小的标题</h6><!-- ********* End ********* -->
</body>
</html>

第三关创建 p 标签

本关任务:创建一个p标签,文本内容为我是一个段落

实现的效果如下:

预览大图

p元素通常用来表示一个段落。

你可以这样创建一个p标签,<p> p标签表示一个段落。</p>

第三关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><!-- ********* Begin ********* --><p>我是一个段落</p><!-- ********* End ********* -->
</body>
</html>

第四关创建 a 标签

本关任务:创建一个a标签, 跳转的地址是https://www.educoder.net,文本内容是Educoder平台

a标签通常用来定义一个链接。href属性的值就是链接的地址。

你可以这样创建一个a标签,<a href="http://www.baidu.com">百度</a>。当你点击这个链接时,它就会跳转到百度首页。

第四关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><!-- ********* Begin ********* --><a href="https://www.educoder.net">Educoder平台</a><!-- ********* End ********* -->
</body>
</html>

第五关创建 img 标签

本关任务:创建一个img标签, 图片的地址是https://www.educoder.net/attachments/download/207801,提示文字是小狗走路

效果如下: 

预览大图

img标签通常用来表示一个图片。src属性的值就是图片的地址,alt属性的值是当图片没有展现出来时提示的文字 。

你可以这样创建一个img标签, <img src="https://www.educoder.net/attachments/download/207791" alt="风景画"/>

这样图片就显示出来了。

第五关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><!-- ********* Begin ********* --><img src="https://www.educoder.net/attachments/download/207801" alt="小狗走路"/><!-- ********* End ********* --></body>
</html>

第六关创建 div 标签

本关任务:创建一个div标签, 文本内容是我是div标签

效果如下:

预览大图

div标签可以把文档分割为独立的、不同的部分。它没有实际的意义,仅仅表示创建了一个块级元素。

你可以这样创建一个div标签,<div>创建div标签</div>

可以发现:它和 <h1>-<h6><p>标签的创建是一样的,只不过它没有实际的意义。

第六关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><h2>我是h2标签</h2><p>我是p标签</p><!-- ********* Begin ********* --><div>我是div标签</div><!-- ********* End ********* -->
</body>
</html>

第七关添加注释

本关任务:注释掉 div 标签,同时在p标签上方添加注释说明。

什么是注释? 为什么要添加注释呢?

注释是解释性文本,在运行程序时,会被程序跳过,不做处理。

注释有两个作用:

  • 可以给代码添加文字说明,便于代码阅读和日后维护;
  • 对于暂时不用但又不能删除的代码,可以添加注释保存下来;

如何添加注释呢?

<!--表示注释的开始, -->表示注释的结束,这样就可以添加提示说明和注释元素了。

你可以这样注释p标签和添加文字说明。

第七关答案 

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8">
</head>
<body><h2></h2><!-- ********* Begin ********* --><!--<div></div>--><!--一带一路-->注:该代码为<p> 之前的代码

实训四:HTTP基础

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,减少网络传输。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪部分,以及哪部分内容优先显示等。python 爬虫开发,主要就是和 HTTP 协议打交道。 本实训主要介绍了网络爬虫的基础知识,包括 HTTP 的状态码、HTTP 消息头、HTTP 请求方式和 HTTP 工作原理等 HTTP 相关知识以及谷歌(Chrome)浏览器的开发者工具简介。

第一关HTTP 标准

本关任务:掌握 HTTP 的相关知识,完成相关选择题。

HTTP 是一个客户端终端和服务器端请求和应答的标准。通过使用网页浏览器、网络爬虫或者其它的工具,客户端发起一个 HTTP 请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如 HTML 文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个“中间层”,比如代理服务器、网关或者隧道(tunnel)。 尽管 TCP/IP 协议是互联网上最流行的应用,HTTP 协议中,并没有规定必须使用它或它支持的层。事实上,HTTP 可以在任何互联网协议上,或其他网络上实现。HTTP 假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在 TCP/IP 协议族使用 TCP 作为其传输层。 

第一关答案 

答案:1.B   2.B  3.D

第二关开发者工具的基本使用

本关任务:了解开发者工具对于爬虫的用途。

开发者工具是一套内置于浏览器中的 Web 开发和调试工具,可用来对网站进行迭代、调试和分析。 对于爬虫实战来说,可以通过开发者工具快捷的定位元素,获取中途请求文件和查看网页结构等极其强大与便捷的用途。  

第二关答案

答案:1.C   2.B

实训五:Python——JSON基础 

在现实世界中,人与人之间的交流,需要建立在某种大家都能听懂的语言基础上。而在计算机领域中,各个系统之间的交流通信,也需要建立在某种公共的格式上。 本次实训将介绍:JSON 数据格式,学习使用 Python 对它们进行解析的方法,以此拓展我们的知识面,让我们能写出更加实用的 Python 程序。

第一关JSON篇:JSON基础知识

本关任务:手动编写一个 JSON 格式的数据文件。

JSON 全称:JavaScript Object Notation(JavaScript 对象表示法),是一种轻量级的文本数据交换格式。与接下来要介绍的 XML 相比,拥有更小、更快、更易解析的特点。 

第一关答案 

{"count":3 , "students":[{"name":"赵昊" , "age":15 , "ismale" :true },{"name":"龙傲天" , "age":16 , "ismale" :true},{"name":"玛丽苏" , "age":15 , "ismale" : false}]
}

第二关JSON篇:使用json库

本关任务:编写一个能读取并修改 JSON 数据的程序。

json库是 Python 内置的一个用于操作 JSON 数据的库,提供了几个函数用于解析生成(或者说反序列化序列化)JSON 格式的数据。 

详情见此篇博文:

Python--JSON基础_宇阷的博客-CSDN博客

实训六:Python——XPath基础 

第一关:XPath 路径表达式

任务描述

本关任务:根据给定的 xml 文档,使用 XPath 表达式选取指定内容。

相关知识

为了完成本关任务,你需要了解 XPath 路径表达式的基本语法,理解节点的基本类型,完成节点的获取、属性的匹配获取、多属性的匹配获取、文本的获取、按序选择等。

节点的基本类型

XPath 是一门在 XML 文档中查找信息的语言,虽然是被设计用来搜寻 XML 文档的,但是它也能应用于 HTML 文档,并且大部分浏览器也支持通过 XPath 来查询节点。在 Python 爬虫开发中,经常使用 XPath 查找提取网页中的信息,因此 XPath 非常重要。

在 XPath 中, XML 文档是被作为节点树来对待的,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。树的根被称为文档节点或者根节点。

根节点(Root Node)

       根节点是一棵树的最顶层,根节点是唯一的。树上其它所有元素节点都是它的子节点或后代节点。对根节点的处理机制与其它节点相同。对树的匹配总是先从根节点开始。文档中的<bookstore>即为根节点。

元素节点(Element Nodes)

  元素节点相对应的是文档中每个元素,一个元素节点的子节点可以为元素节点、注释节点、处理指令节点和文本节点。元素节点可以定义一个唯一的标识(id)。元素节点可以有拓展名,由两部分组成:命名空间 URL 和本地命名。文档中的<book>即为元素节点。

文本节点(Text Nodes)

  文本节点包含一组字符数据,任何一个文本节点都没有相邻的兄弟文本节点,而且文本节点没有扩展名。文档中的Learning XML即为文本节点。

属性节点(Attribute Nodes)

  每个元素节点有一个相关联的属性节点集合,元素是每个属性节点的父节点,但属性节点却不是其父元素的子节点。这就是说,通过查找元素的子节点可以匹配出元素的属性节点,但反过来不成立,只是单向的。再有,元素的属性节点没有共享性,也就是说不同的元素节点不共有同一个属性节点。文档中的lang="eng"即为属性节点。

命名空间节点(Namespace Nodes)

  每个元素节点都有一个相关联的命名空间节点集。在 XML 文档中,命名空间是通过保留属性声明的。因此,在 XPath 中,该类节点与属性节点极为相似,它们与父元素之间的关系是单向的,并且不具有共享性。

处理指令节点(Processing Instruction Nodes)

  处理指令节点对应于 XML 文档中的每一条处理指令。它也有扩展名,扩展名的本地命名指向处理对象,而命名空间部分为空。

注释节点(Comment Nodes)

  注释节点对应于文档中的注释。

Xpath路径表达式的基本语法

XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是沿着路径(path)或者步(steps)来选取的。接下来介绍如何选取节点,首先了解一下常用的路径表达式,来进行节点的选取,如下表所示:

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//选择任意位置的某个节点
.选取当前节点
..选取当前节点的父节点
@选取属性

根据路径表达式的规则,我们对上文的的 XML 文档进行节点选取,如下表所示。

XPath路径表达式含义
bookstore选取 bookstore 元素的所有子节点
/bookstore选取根元素 bookstore
/bookstore/book/text()选取属于 bookstore 子元素的 book 元素下的所有文本内容
//book选取所有 book 子元素,而不管它们在文档中位置
//@eng选取名为 eng 的所有属性

谓语的用法如下表所示:

XPath路径表达式含义
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素
//title[@lang='eng']选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性
//title[@lang='eng' and @class="good"] 选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性和值为good的class属性
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00

XPath 在进行节点选取的时候可以使用通配符*匹配未知的元素,同时使用操作符|一次选取多条路径,使用示例如下表所示:

XPath路径表达式含义
/bookstore/*选取 bookstore 元素的所有子元素
//*选取文档中的所有元素
//title[@*]选取所有带有属性的 title 元素
//book/title 丨 //book/price选取 book 元素的所有 title 和 price 元素
//title 丨 //price选取文档中的所有 title 和 price 元素
/bookstore/book/title 丨 //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素

第一关答案

1.选取bookstore元素的所有子节点
********** Begin *********
bookstore
*********** End **********2.选取所有拥有名为 lang 的属性的 title 元素
********** Begin *********
//title[@lang]
*********** End **********3.选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性和值为good的class属性
********** Begin *********
//title[@lang='eng' and @class="good"] 
*********** End **********4.选取属于 bookstore 子元素的book元素下的所有文本内容
********** Begin *********
/bookstore/book/text()
*********** End **********5.选取属于 bookstore 子元素的第一个 book 元素
********** Begin *********
/bookstore/book[1]*********** End **********

第二关:XPath 轴定位

任务描述

本关任务:根据给定的 xml 文档,使用 XPath 表达式选取指定内容。

相关知识

为了完成本关任务,你需要了解:XPath 中如何使用轴定位。

在爬虫里面经常要用到定位,XPath 定位有着举足轻重的地位,因为它功能很强大。结合它里面的文本定位、模糊定位、逻辑定位等,基本能搞定所有的元素定位问题。

轴定义了所选节点与当前节点之间的树关系。在 Python 爬虫开发中,提取网页中的信息时,会遇到这种情况:首先提取到一个节点的信息,然后想在在这个节点的基础上提取它的子节点或者父节点,这时候就会用到轴的概念。轴的存在会使提取变得更加灵活和准确。

在上一关,我们了解了位置路径表达式中的相对位置路径、绝对位置路径和步的概念。位置路径可以是绝对的,也可以是相对的。绝对路径起始于正斜杠/,而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割: /step/step/..(绝对位置路径),step/step/.. (相对位置路径)。

步(step)包括:轴(axis)、节点测试( node-test)、零个或者更多谓语( predicate),用来更深入地提炼所选的节点集。XPath 中的轴名及含义如下表所示:

轴名含义
ancestor选取当前节点的所有先辈(父或祖父等)
ancestor-or-self选取当前节点的所有先辈(父或祖父等)以及当前节点本身
attribute选取当前节点的所有属性
child选取当前节点的所有子元素
descendant选取当前节点的所有后代元素(子或孙等)
descendant-or-self选取当前节点的所有后代元素(子或孙等)以及当前节点本身
following选取文档中当前节点的结束标签之后的所有节点
namespace选取当前节点的所有命名空间节点
parent选取当前节点的父节点
preceding选取文档中当前节点的开始标签之前的所有节点
preceding-sibling选取当前节点之前的所有同级节点
self选取当前节点

轴的使用

轴需要通过步的语法,来实现节点的选取。步的语法为:轴名称::节点测试[谓语],大家可能觉比较抽象。下面通过案例演示来帮助理解,XML 文档示例如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book><title lang="eng" class="good">Harry Potter</title><price>29.99</price>
</book>
<book><title lang="eng">Learning XML</title><price>39.95</price>
</book>
</bookstore>

第二关答案

1.选取所有属于当前节点的子元素的 book 节点
********** Begin *********        
child::book
*********** End **********2.选取当前节点的 lang 属性
********** Begin *********        
attribute::lang
*********** End **********3.选取当前节点的所有 price 孙节点
********** Begin *********        
child::*/child::price
*********** End **********

第三关:XPath 解析

任务描述

本关任务:编写解析 HTML 文件的 Python 程序。

相关知识

为了完成本关任务,你需要掌握:Python 环境下使用 XPath 对 HTML 文件进行解析。

lxml的安装

lxml 是 一个 HTML/XML 的解析器,主要的功能是解析和提取 HTML/XML 数据。lxml 和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的 XPath 语法,来快速地定位特定元素以及节点信息。

如果本地 Python 环境没有安装 lxml,可以在命令提示符窗口输入命令pip install lxml,安装 lxml 模块,如下图所示。

lxml的使用

使用 lxml,需要先导入相关包,语法如下:

  1. from lxml import etree

现在有如下 HTML 代码,需要获取第一个 book 节点下的 title 节点中的 class 的属性值:

  1. <html>
  2. <head></head>
  3. <body>
  4. <bookstore>
  5. <book>
  6. <title lang="eng" class="good">Harry Potter</title>
  7. <price>29.99</price>
  8. </book>
  9. <book>
  10. <title lang="eng">Learning XML</title>
  11. <price>39.95</price>
  12. </book>
  13. </bookstore>
  14. </body>
  15. </html>

使用 xpath 表达式解析网页之前,需要获取元素树对象,这里有两种方法:

  • 如果上述代码为本地文件,并且文件名为test.html,获取元素树对象的代码如下所示:
    1. parse = etree.HTMLParser(encoding='utf-8') # 添加编码
    2. tree = etree.parse('test.html', parse) # 指定本地HTML文件读取
  • 如果上述代码为字符串类型变量,并且变量名为html,获取元素树对象的代码如下所示:
    1. parse = etree.HTMLParser(encoding='utf-8') # 添加编码
    2. tree = etree.HTML(html, parse) # html为python字符串

获取元素树对象后,就可以使用 XPath 表达式解析网页了,代码如下所示:

  1. result = tree.xpath(xpath表达式) # 返回类型为列表

完成上述指定任务有多种实现方式,以下演示了四种不同的 XPath 表达式,都能够获取第一个 book 节点下的 title 节点中的 class 的属性值。

  1. # 相对路径 book 节点选择
  2. print(tree.xpath('//book[1]/title/@class')[0])
  3. # 相对路径 title 节点存在 class 属性条件选择
  4. print(tree.xpath('//title[@class]/@class')[0])
  5. # 同上, 但是使用了轴选择 class 属性值
  6. print(tree.xpath('//title[@class]/attribute::class')[0])
  7. # 绝对路径常规选择
  8. print(tree.xpath('/html/body/bookstore//book[1]/title/@class')[0])

以上代码都可以获取图中红框部分的内容。

,

第三关答案

# 导入lxml库
from lxml import etree
# 读取lll.html文件并转化为元素树对象
parse = etree.HTMLParser(encoding='utf-8')
tree = etree.parse('src/step3/lll.html', parse)
# 补充xpath表达式,获取所有书的名称
# ********** Begin ********* #       
print(tree.xpath('//bookstore/book/title/text()'))
# *********** End ********** #
# 补充xpath表达式,获取所有书的价格
# ********** Begin ********* #       
print(tree.xpath('//bookstore/book/price/text()'))
# *********** End ********** #
# 填写代码, 获取价格低于30的书名
# ********** Begin ********* #       
print(tree.xpath('//bookstore/book[price < 30.00]/title/text()')[0])
# *********** End ********** #

在学习中成功、在学习中进步!我们一起学习不放弃~

记得三连哦~ 你们的支持是我最大的动力!!欢迎大家阅读往期文章哈~

小编联系方式如下,欢迎各位巨佬沟通交流,代码什么的加小编私聊哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/565221.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot swagger之前后端分离

前后端分离详解 现在的趋势发展&#xff0c;需要把前后端开发和部署做到真正的分离做前端的谁也不想用Maven或者Gradle作为构建工具做后端的谁也不想要用Grunt或者Gulp作为构建工具前后端需要通过接口来协作 可能是JSON格式的RESTFul的接口可能是XML的接口重点是后台只负责数据…

MATLAB基础教程(5)——斐波那契数列

目录 前言 正文开始啦&#xff1a; 总体思路&#xff1a; 首先创建文件&#xff1a; 编写 fibo_use.m 文件的内容代码 编写 fibonacci_mine.m 文件中的代码 代码运行 总结&#xff1a; 前言 斐波那契数列是一个很有趣的数列&#xff0c;有趣的地方在两点&#xff0c;在…

数据采集与清洗基础习题(二)Python爬虫常用模块,头歌参考答案

数据采集习题参考答案&#xff0c;会持续更新&#xff0c;点个关注防丢失。为了方便查找&#xff0c;已按照头歌重新排版&#xff0c;朋友们按照头歌所属门类查找实训哦&#xff0c;该篇为Python爬虫常用模块。 创作不易&#xff0c;一键三连给博主一个支持呗。 文章目录 实…

Spring Boot freemarker导出word下载

freemarker详解 FreeMarker是一款模板引擎&#xff1a; 即一种基于模板和要改变的数据&#xff0c; 并用来生成输出文本&#xff08;HTML网页、电子邮件、配置文件、源代码等&#xff09;的通用工具。 它不是面向最终用户的&#xff0c;而是一个Java类库&#xff0c;是一款程序…

学生用计算机怎么累加,计算机一级OFFICE辅导:累加小技巧

我们在工作中常常需要在已有数值的单元格中再增加或减去另一个数。一般是在计算器中计算后再覆盖原有的数据。这样操作起来很不方便。考试大编辑推荐一个小技巧&#xff0c;可以有效地简化老式的工作过程。(1).创建一个宏&#xff1a;选择Excel选单下的“工具→宏→录制新宏”选…

不同进制之间的转化

将二进制、八进制、十六进制转换为十进制 二进制、八进制和十六进制向十进制转换都非常容易&#xff0c;就是“按权相加”。所谓“权”&#xff0c;也即“位权”。 假设当前数字是 N 进制&#xff0c;那么&#xff1a; 对于整数部分&#xff0c;从右往左看&#xff0c;第 i 位…

[刨根问底] 五分钟搞懂组合评价模型—模糊Borda (以2021 年大学生数模国赛C题为例)

组合评价模型—模糊Borda(Matlab) 我们的征途是星辰大海&#xff0c;而并非烟尘人间。 目录 组合评价模型—模糊Borda(Matlab) 一、模糊Borda法简介 二、模糊Borda法主要步骤 &#xff08;1&#xff09;计算隶属度 &#xff08;2&#xff09;计算模糊频数 &#xff08;…

计算机桌面右键新建展不开,Win10右键新建不见了怎么办?Win10电脑桌面右键新建没有了解决方法...

近期有Win10用户遇到一个问题&#xff0c;也就是电脑桌面右键新建没有了&#xff0c;比如想要创建一个文本文档、文件夹、Word&#xff0c;没有新建功能无法创建&#xff0c;那么Win10右键新建不见了怎么办&#xff1f;下面装机之家分享一下Win10电脑桌面右键新建没有了解决方法…

最常用的客观赋权方法——熵权法

我们的征途是星辰大海&#xff0c;而并非烟尘人间。 文章目录 一、熵权法的原理 1.1 信息熵 1.2 熵权法 二、熵权法的主要步骤 2.1 数据标准化 2.2 求各指标在各方案下的比值 2.3 求各指标的信息熵。 2.4 确定各指标的权重 2.4.1 通过信息熵计算各指标的权重&#…

2017韩老师计算机网络,2017年计算机等考三级网络技术辅导:计算机网络拓扑结构...

1&#xff0e;计算机网络拓扑的定义计算机网络设计的第一步就是网络拓扑设计。拓扑学是几何学的一个分支。计算机网络拓扑是通过网中结点与通信线路之间的几何关系表示网络结构&#xff0c;反映出网络各实体之间的结构关系。2&#xff0e;网络拓扑的分类网络拓扑可以根据通信子…

Spring Boot html页面解析之jsoup

目的 我们要对一个页面进行数据抓取&#xff0c;并导出doc文档 html解析器 jsoup 直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API&#xff0c;可通过DOM&#xff0c;CSS以及类似于JQuery的操作方法来取出和操作数据。 htmlparser 提供了线性和嵌套两种方…

2021年五一杯数学建模A题(疫苗生产调度问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 2.4 问题四分析与求解 2.5 问题五分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 新冠肺炎肆虐全球&#xff0…

Spring Boot EasyPoi导出Excel下载

Java关于excel的操作 Java Excel俗称jxl&#xff0c;可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件&#xff0c;现在基本没有更新了 Apache POI是Apache基金组织Jakarta项目的子项目&#xff0c;它包括一系列的API&#xff0c;可以操作多种格式的Mic…

2021年华中杯A题(马赛克瓷砖选色问题)详细分析

目录 一、基本介绍 1.1 题目描述 1.2 待解决问题 二、问题分析与求解 2.1 问题一分析与求解 2.2 问题二分析与求解 2.3 问题三分析与求解 三、完整代码 四、总结 一、基本介绍 1.1 题目描述 马赛克瓷砖是一种尺寸较小&#xff08;常见规格为边长不超过 5cm&#xff09…

计算机无法连接无线信号,win7系统连接无线信号时提示Windows无法连接到路由器名称的四种解决方法...

现如今网络发展速度非常快&#xff0c;无线网络已经普及了&#xff0c;使用率高了遇到的问题也就多了。比如有时候笔记本win7系统连接无线信号时出现“Windows无法连接到路由器名称”(如下图所示)&#xff0c;该如何解决此问题呢&#xff1f;下面脚本之家的小编介绍几种解决方法…

数据采集与清洗基础习题(四)Pandas初体验,头歌参考答案

数据采集习题参考答案&#xff0c;会持续更新&#xff0c;点个关注防丢失。 创作不易&#xff0c;一键三连给博主一个支持呗。 为了方便查找&#xff0c;已按照头歌重新排版&#xff0c;朋友们按照头歌所属门类查找实训哦&#xff0c;该篇为Pandas。 文章目录 实训一&#…

全国计算机准考证打印2015年,甘肃2015下半年全国计算机等级考试准考证打印时间...

甘肃2015下半年全国计算机等级考试准考证打印时间一、打印准考证考生可在考前2周之内登陆全省统一报名网站自主打印准考证&#xff0c;或到考点现场领取准考证。二、考试时间下半年&#xff1a;2015年9月19日至21日&#xff0c;分批进行。考试具体时间、地点均以“准考证”为准…

TOPSIS与模糊Borda 的组合应用(以第二届大湾区杯和国赛为案例)

目录 一、TOPSIS&#xff08;优劣解距离法&#xff09;简介 二、TOPSIS&#xff08;优劣解距离法&#xff09;主要步骤 &#xff08;1&#xff09;数据进行标准化 &#xff08;2&#xff09;构建决策矩阵 &#xff08;3&#xff09;构造加权规范阵 &#xff08;4&#xf…

Spring Boot 页面国际化

internationalization详解 国际化&#xff08;internationalization&#xff09;是设计和制造容易适应不同区域要求的产品的一种方式。它要求从产品中抽离所有地域语言&#xff0c;国家/地区和文化相关的元素。换言之&#xff0c;应用程序的功能和代码设计考虑在不同地区运行的…

唯美计算机语言,唯美精辟的语句

1、当泪水一滴滴的掉落在我的手上&#xff0c;那时竟想为何我非你不可&#xff01;2、原来再美好的承诺&#xff0c;最终还是会被现实打败。3、明明不是陌生人&#xff0c;却装的&#xff0c;比陌生人&#xff0c;还要陌生。4、如果我是个瘦子&#xff0c;伤心时我还可以数数排…