《python3网络爬虫开发实战 第二版》之爬虫基础-Web网页基础 详解

news2024/10/7 5:38:52

文章目录

  • Web网页基础
    • 网页的组成
      • HTML
      • CSS
      • JavaScript
    • 网页的结构
    • 节点树及节点间的关系
    • 选择器
    • 写在最后

Web网页基础

用浏览器访问不同的网站时,展现的页面各不相同。下面从网页的组成、网页的结构、节点树及节点间的关系、选择器几个方面了解网页。

网页的组成

网页可以分为三大部分:HTML、CSS、JavaScript。

如果把网页比作一个人,那么HTML相当于人的骨架,JavaScript相当于肌肉,CSS相当于皮肤。三者结合起来才能形成一个完善的网页。

HTML定义了网页的内容和结构、CSS定义了网页的样式、JS定义了网页的行为

HTML

  • html 是超文本标记语言,是一种来描述网页的语言。
  • 网页中包括文字、按钮、图片、视频等各种复杂的元素。
  • 网页通过不同类型的标签来表示不同类型的元素。

打开google浏览器,访问百度,按F12进入开发者工具,默认就是Elements面板(如果不是,就切换到Elements面板)。这时呈现出来的就是百度的HTML页面。如下图所示。可以看出HTML有明显的层级结构,并且有各种标签元素,每种标签元素都有各自的含义。浏览器解析这些标签之后,便会在网页中将它们渲染成一个个节点,也就成了我们看到的网页。
在这里插入图片描述

CSS

HTML定义了网页的架构,但是只有HTML的页面并不美观。CSS是层叠样式表,它可以让网页变得美观起来。

在网页中,一般会统一定义整个网页的样式规则,并写入css文件(现在样式文件有很多,如scss)。在HTML文件中,只需要使用link标签将写好的css文件写入,便可以使整个页面变得美观。

JavaScript

JavaScript简称JS(与JAVA无关),是一种脚本语言(可以百度搜索一下什么是脚本语言)。HTML+CSS提供的只是一种静态信息,我们在网页里会看到各种交互或动画效果,这就是JS的作用。

JS可以写在HTML页面中,也可以写入到.js文件中,通过script标签进行引入。

网页的结构

创建一个test.html文件,代码内容如下:

<!DOCTYPE html>  <!--用DOCTYPE 定义了文档类型是 html-->
<html>
<head>
    <meta charset="UTF-8">  <!--指定网页的编码格式是UTF-8-->
    <title>我是head中的title标签</title>
</head>
<body>
  <div id="container">
    <div class="wrapper">
      <h2 class="title">我是二级标题标签</h2>
      <p clss="text">我是p标签</p>
    </div>

  </div>
</body>
</html>

从上面代码可以看出HTML基本结构:

  • 使用DOCTYPE定义文档类型
  • 最外层是html标签,有开始标签,有结束标签
  • 接着是head标签(网页头)和body标签(网页体),同样它们也是有开始标签和结束标签
  • head标签中定义了两个标签
    • 一个meta标签,表明网页的编码格式是UTF-8
    • 一个title标签,表明网页的标题,会显示在选项卡中,不显示在正文
  • body标签 在网页正文中显示。
    • body标签内定义了一个id为container的div (div表示一个区块)
      • 又在其内部定义了一个class为wrapper的div,其内部又有两个标签
        • h2标签,表示二级标题
        • p标签,表示一个段落

代码中出现的id和class,都是标签中常用的属性:

  • id是唯一的,可以通过id找到对应的区块。
  • class 也是常用的属性,通常配合CSS来设定样式

页面展示的效果如下图所示:
在这里插入图片描述

节点树及节点间的关系

在HTML中,所有标签定义的内容都是节点,这些节点构成了一个HTML节点树,即HTML DOM树。

通过HTML DOM,节点树中所有的节点都可以通过JS访问、修改、删除、创建。

选择器

网页由一个个节点组成,CSS选择器会为不同的节点设置不同的样式规则。

在CSS中,使用CSS选择器来定位节点:

  • 使用id : #container
  • 使用class: .wrapper
  • 使用标签名:h2

在CSS中,可以进行嵌套选择:

  • #container .wrapper p 表示先选择id为container的节点,接着在其内部选择class为wrapper的节点, 最后选择其内部的p节点
  • div#container .wrapper p.text 表示先选择id为container的div,接着在其内部选择class为wrapper的节点,最后在其内部选择class为text的p节点

CSS其他语法规则如下表所示:

选择器例子例子描述
.class.intro选择class='intro’的所有节点
#id#firstname选择id="firstname"的所有节点
**选择所有节点
elementp选择所有p节点
element,elementdiv,p选择所有的div节点和所有的p节点
element elementdiv p选择div节点内部的所有的p节点
element>elementdiv > p选择父节点为div的所有的p节点
element+elementdiv+p选择紧接在div节点之后的所有的p节点
[attribute][target]选择带有target属性的所有节点
[attribute=value][target=blank]选择target="blank"的所有节点
[attribute~=value][title~=flower]选择title属性包含flower的所有节点
:linka:link选择所有未被访问的链接
:visiteda:visited选择所有已被访问的链接
:activea:active选择活动链接
:hovera:hover选择鼠标指针位于其上的链接
:focusinput:focus选择获得焦点的input节点
:first-letterp:first-letter选择每个p节点的首字母
:first-linep:first-line选择每个p节点的首行
:first-childp:first-child选择属于父节点的第一个子节点的所有p节点
:beforep:before在每个p节点的内容之前插入内容
:afterp:after在每个p节点的内容之后插入内容
:lang(language)p:lang选择带有以it开头的lang属性值的所有p节点
element1~element2p~ul选择前面有p节点的所有ul节点
[attribute^=value]a[src^=“https”]选择src属性值以https开头的所有a节点
[attribute$=value]a[src$=“.pdf”]选择src属性值以.pdf结尾的所有a节点
[attribute*=value]a[src*=“abc”]选择src属性中包含abc子串的所有a节点
:first-of-typep:first-of-type选择属于对应父节点的首个p节点的所有p节点
:last-of-typep:last-of-type选择属于对应父节点的最后一个p节点的所有p节点
:only-of-typep:only-of-type选择属于对应父节点的唯一p节点的所有p节点
:only-childp:only-child选择属于对应父节点的唯一子节点的所有p节点
:nth-child(n)p:nth-child选择属于对应父节点的第二个子节点的所有p节点
:nth-last-child(n):p:nth-last-child从最后一个节点开始计数,选择属于对应父节点的第二个子节点的所有p节点
:nth-of-type(n):p:nth-of-type选择属于对应父节点的第二个p节点的所有p节点
:nth-last-of-type(n):p:nth-last-of-type从最后一个节点开始计数,选择属于对应父节点的第二个p节点的所有p节点
:last-childp:last-child选择属于对应父节点的最后一个子节点的所有p节点
:root:root选择文档的根节点
:emptyp:empty选择没有子节点的所有p节点(包括文本节点)
:target#news:target选择的当前活动的#news节点
:enabledinput:enabled选择每个启用的input节点
:disabledinput:disabled选择每个禁用的input节点
:checkedinput:checked选择每个被选中的input节点
:not(selector):not选择非p节点的所有节点
::selection::selection选择被用户选取的节点部分

写在最后

本系列博客是根据崔庆才老师的《python3网络爬虫开发实战 第二版》整理而成。每篇博客对应于每一节。主要是为了记录书中的重点,便于自己温习。如有错误或不足,请提出,大家一起学习,一起进步。

另:若转载,请附上本文链接。

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

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

相关文章

泼辣修图2023最新Polarr网页版有哪些新功能?

无论你是入门新手还是摄影专家&#xff0c;泼辣修图都可以满足你的一切需求。对于入门新手而言&#xff0c;泼辣修图搭载的先进自动增强工具和富有创意的图像滤镜&#xff0c;可以帮助他们快速雕琢图像的每一个细节。对于摄影专家而言&#xff0c;图层混合、局部调整、曲线工具…

Mysql批量更新的一种很少见但很快的方式

相信朋友们来到这里&#xff0c;都被批量更新搞的很烦。因为数据量增大&#xff0c;处理时间甚至可以说指数增长。在mybatis里面用foreach其实效果并不好。当需要更新的数据条数很多时&#xff0c;程序响应会变得非常慢。那我无意中学习到了一种非常小众的写法的语句。但亲身测…

Dart语法学习-函数、类与运算符 学习笔记

一、Runes and grapheme clusters 报错&#xff1a;Couldnt resolve the package characters in package:characters/characters.dart. 参考&#xff1a;flutter Error: Could not resolve the package ‘characters‘ in ‘package:characters/characters.dart‘._前进六的博…

AJAX(Asynchronous Javascript And Xml)

传统请求及缺点传统的请求都有哪些&#xff1f;直接在浏览器地址栏上输入URL。点击超链接提交form表单使用JS代码发送请求window.open(url)document.location.href urlwindow.location.href url....传统请求存在的问题页面代码全部清空、刷新&#xff0c;导致了用户的体验较差…

C语言——读写TXT文件中的(多行多列矩阵型)浮点型数据的两种方式

C语言——读写TXT文件中的&#xff08;多行多列矩阵型&#xff09;浮点型数据将要提取的数据方式一&#xff1a;将数据按行读取并写入到结构体数组中读取一个文件中的数据读取两个文件中的数据报错解决&#xff1a;0x00007FF6C90AB2C7 处有未经处理的异常(在 sfann_sins.exe 中…

LabVIEW更高的吞吐量与更少的延迟2

LabVIEW更高的吞吐量与更少的延迟2上一篇《LabVIEW更高的吞吐量与更少的延迟1》介绍了吞吐量的内容&#xff0c;本次介绍延迟的相关内容。改善延迟有一些技术可以解决改善延迟的问题。围绕这一目标的两个主要工具是实时操作系统和FPGA。实时操作系统任何操作系统都会遇到抖动或…

应用可靠性与性能不给力?HarmonyOS HiViewDFX了解一下

作为基础软件服务子系统的HarmonyOS HiViewDFX&#xff08;以下简称HiViewDFX&#xff09;框架&#xff0c;是HarmonyOS的公共基础设施。包括日志、事件、跟踪、故障管理及观测剖析五大部分&#xff0c;同时也提供了故障检测、定位和性能观测剖析的开发套件&#xff0c;以及将端…

操作系统权限提升(十一)之系统错误配置-启动项提权

系列文章 操作系统权限提升(一)之操作系统权限介绍 操作系统权限提升(二)之常见提权的环境介绍 操作系统权限提升(三)之Windows系统内核溢出漏洞提权 操作系统权限提升(四)之系统错误配置-Tusted Service Paths提权 操作系统权限提升(五)之系统错误配置-PATH环境变量提权 操作…

【前端】Vue项目:旅游App-(19)loading:网络请求时显示loading效果

文章目录目标过程与代码loading效果mainStore控制loading显示点击蒙板取消网络请求在网络请求处添加对loading的控制效果总代码修改或添加的文件loading.vueservice/request/indexstore/modules/mainApp.vue参考本项目博客总结&#xff1a;【前端】Vue项目&#xff1a;旅游App-…

自动化运维|云原生架构下的产品自动化发布、快速部署和持续交付实战之路

自动化运维|云原生架构下的产品自动化发布、快速部署和持续交付实战之路。 1.背景介绍 CI/CD是一种通过在应用开发阶段引入自动化来频繁向客户交付应用的方法。CI/CD 的核心概念是持续集成、持续交付和持续部署。作为一种面向开发和运维团队的解决方案&#xff0c;CI/CD 主要针…

只做笔记有必要买apple pencil吗?平价电容笔排行榜

如今国内的电容笔&#xff0c;牌子也越来越多了&#xff0c;苹果原装电容笔虽然性能不错&#xff0c;但价格也非常昂贵&#xff0c;一般人是买不起的。现在市面上有很多可以取代原来的苹果电容笔的平替电容笔。下面&#xff0c;我给大家推荐几款电容笔&#xff0c;好用而且价格…

Java 文件IO操作基础,File,FileInputStream,FileOutputStream

什么是文件 有个时候我们程序中的数据不会直接保存&#xff0c;一旦程序断电&#xff0c;数据将不会存在&#xff0c;如果我们想要我们程序中的数据永久的保存起来&#xff0c;所以&#xff0c;java的文件io显得非常重要。 什么是文件流 创建文件 如下相关的文件io方法 new F…

【教程】Wireshark抓取抖音直播的OBS推流地址和密钥

真不用花钱去买提取推流码的软件。。。自己提取很简单的。 简单记录一下&#xff0c;以备自己需要时候忘了怎么搞。 1、电脑开热点&#xff0c;手机连接热点&#xff1b; 2、电脑安装wireshark软件&#xff0c;并选择WLAN或者以太网接口&#xff1b; 3、wireshark筛选rtmpt&am…

Kubernetes持久化Events到sentry

背景 Kubernetes中的事件最终还是存储在etcd中&#xff0c;默认情况下只保存1个小时&#xff0c;由于etcd并不支持一些复杂的分析操作&#xff0c;默认Kubernetes只提供了非常简单的过滤方式&#xff0c;比如通过Reason、时间、类型等。同时这些事件只是被动的存在etcd中&…

CAPL(vTESTStudio) - DOIP - UDP发送_03

继UDP接收的介绍完成后,今天我们介绍下UDP发送的函数,这里我们将我自主开发的函数整体都会介绍个大家,一般能够完成大家日常脚本开发中90%以上使用发送UDP的数据函数,绝对干货满满。 UDP发送 一、参数定义 无论DoIP发送报文的UDP还是TCP函数,亦或是CAN、CANFDLIN的发送函…

Redux了解及应用(三)

React - redux 使用&#xff08;由浅入深&#xff09;&#xff1a;https://blog.csdn.net/Jie_1997/article/details/128078971 这篇文章总结的很棒&#xff01;&#xff01;&#xff01;了解redux及应用直接看这篇文章即可 备注&#xff1a;第五节的第三小节&#xff0c;容器…

学习驱动的复杂软件符号执行

原文来自微信公众号“编程语言Lab”&#xff1a;学习驱动的复杂软件符号执行搜索关注“编程语言Lab”公众号&#xff08;HW-PLLab&#xff09;获取编程语言更多技术内容&#xff01;欢迎加入编程语言社区 SIG-编程语言测试&#xff0c;了解更多编程语言测试相关的技术内容。加入…

元宇宙:有人追捧,就会有人抵触

或许&#xff0c;直到现在&#xff0c;我们依然无法否认元宇宙即将对我们的生产和生活产生的深刻影响。即使是在它遭遇巨大的不确定性的大背景下&#xff0c;依然如此。 有人追捧&#xff0c;便有人抵触。元宇宙商用的止步不前&#xff0c;元宇宙技术的难以突破……几乎都是这…

为什么不进行穷举测试?

本章主要介绍不对所有可能性进行测试的原因&#xff0c;对于经理和测试人员&#xff0c;都应该了解测试是一种采样过程&#xff0c;需要了解采样给测试所带来的风险。 1、可进行测试的数目是无限的 如果不能查看代码内部逻辑&#xff0c;可输入的测试用例是无限的。当然还有在不…

第30章 分布式缓存强制删除触发器的触发调试

1 Services.Users.Caching.RoleCacheEventConsumer using Core.Caching; using Core.Domain.Users; using Services.Caching; namespace Services.Users.Caching { /// <summary> /// 摘要&#xff1a; /// 通过该类中的方法成员&#xff0c;在角色实体的1个实例…