Python 学习第 30 天(≧∀≦)ゞ

当我们爬取网页时,常常面对 HTML 文档以及内部源码用 CSS 渲染,而这些前端的配置都非常有特点和规律,利于我们分块、按特征提取想要的内容。因此,今天先了解一下 HTML 与 CSS 的基本结构与语法。


一、HTML

1. 概念

        HTML 是一种超文本标记语言,是编写网页最基本、最核心的语言,本质上就是用不同的标签对不同的内容(文字、图形、动画、声音、表格、链接等)进行标记,使内容在网页上按照规则以我们想要的方式呈现。

2. 基础语法

        基本格式:<标签名 属性名1 = "属性值1", 属性名2 = "属性值2",……>待特殊处理的内容</标签名>

        总的来说,在网页中需要展示的内容,如果不用标签(<标签名></标签名>)括住,其将会被识别为普通形式,如文字会被识别为纯文本,无法通过设置 CSS 对其外观进行渲染(调节大小、颜色、字体等)。

        一般情况下,对于双标签,有开始就要有结束,即 <标签> 与 </标签> 是成对出现的,如果缺少,系统会自动补齐,但难免会导致样式出错、布局混乱、嵌套层级等问题。对于单标签则没有以上情况,只需要在需要的位置标注即可。

标签 含义
<html></html> 整个网页的根标签
<head></head> 网页的头部
<meta 属性名 = "属性"> 网页的编码格式
<title></title> 网页的标签,“这个网页叫什么?”
<body></body> 网页的主体
<footer></footer> 网页的尾部
<div></div> 区块容器,“网页头部/主体/尾部中含有几个部分?”
<h1></h1>,<h2></h2>,……,<h6></h6> 从大到小,1~6 级标题
<p></p> 段落
<span></span> 行内文字(不换行)
<strong></strong> 加粗
<em></em> 斜体
<a></a> 超链接
<ul></ul> 无序列表(默认:圆点)
<ol></ol> 有序列表(默认:阿拉伯数字)
<li></li> 列表项
<table></table> 表格
<tr></tr> 表格行
<th></th> 表头单元格
<tb></tb> 表格单元格
<form></form> 表单
<label></label> 表单标签(文字说明)
<button></button> 按钮
<select></select> 下拉选择框
<option></option> 下拉选项
<textarea></textarea> 多行文本框
<br> 换行
<hr> 分割线
<img> 图片
<link> 引入 CSS 文件
<base> 链接基础地址
<input> 输入框(文本 / 密码 / 单选 / 多选)

        注意:<!DOCTYPE html> 不是双标签,也不是单标签,它是 html5 的声明,用于告诉浏览器这个文件内的内容是什么,以便浏览器解码。

二、CSS

1. 概念

        CSS(层叠样式表)是一种用于描述 HTML 和 XML 文档样式的语言,它的作用在于控制网页的外观与布局,让网页更加美观、易维护。一般其会以放在标签内的 属性名 = "属性值" 出现,或在 <head></head> 网页头部中用 <style></style> 标签中编写各部分的样式,或先设置一个 CSS 文件后用 link 引入文档中。

2. 选择器

        在 <style></style> 标签或  CSS 文件中,我们通过选择器精准控制每个部分的样式,例如:同一种标签、同一个类别、同一个子层级等。

        控制 / 样式显示优先级:行内选择器 > ID 选择器 > 类 / 伪类选择器 > 元素 / 伪元素选择器 > 通用选择器

(1) 通用选择器

        不管属于哪个标签,所有的内容都用这个样式。

        格式:

* {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(2) 标签(元素)选择器

        直接用标签名控制同一标签属性中的内容样式。

        格式:

标签名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(3) 类选择器

        当某个标签中设置有类(class = "类名")时,就可以通过类名直接控制这部分的内容。

        格式:

.类名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(4) ID 选择器

        当某个标签中设置了 ID(id = "ID 名")时,就可以通过 ID 名直接控制该部分内容的样式,单需要注意,一个页面中一个 ID 名只能出现一次,也就是只能设置在一个标签中,就算是同类型的标签也不能重复标注。

        格式:

#ID名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(5) 后代选择器

        控制一个标签内的子标签中所有内容的样式。

        格式:

标签名 子标签名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(6) 子选择器

        控制标签内的子标签中内容的样式,不包括子标签的子标签。(只控制子代,孙代、曾孙代等都不管)

        格式:

标签名 > 子标签名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(7) 相邻兄弟选择器

        控制本标签和本标签后的第一个指定类型的同级标签中的内容样式。

        格式:

标签名 + 标签名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(8) 通用兄弟选择器

        控制本标签和本标签后的指定类型的所有同级标签。

        格式:

标签名 ~ 标签名 {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(9) 属性选择器

        根据标签括号内的属性与属性值控制标签中的内容样式。

        格式:

标签名[属性名] {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

标签名[属性名 = "属性值"] {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

标签名[属性名 ~= "属性值包含的内容"] {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

标签名[属性名 ^= "属性值的开头"] {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

标签名[属性名 $= "属性值的结尾"] {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

标签名[属性名 *= "属性值包含的字符串"] {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

(10) 伪类选择器

        按照标签中的内容的状态、位置、行为控制其样式。

        (A) 链接/状态

a:link { color: blue; }       /* 未访问 */
a:visited { color: purple; }  /* 已访问 */
a:hover { color: red; }      /* 鼠标悬浮 */
a:active { color: green; }    /* 点击时 */

        (B)j 结构

/* 父元素下第一个子元素 */
div p:first-child { color: red; }

/* 父元素下最后一个子元素 */
div p:last-child { color: blue; }

/* 第n个子元素 */
div p:nth-child(2) { font-weight: bold; }

/* 偶数行/奇数行(表格常用) */
tr:nth-child(even) { background: #f2f2f2; }
tr:nth-child(odd) { background: white; }

/* 否定选择器 */
div:not(.box) { margin: 0; }

        (C) 表单

input:focus { outline: 2px solid skyblue; }  /* 聚焦 */
input:disabled { background: #eee; }        /* 禁用 */
input:checked { transform: scale(1.2); }    /* 选中 */

(11) 伪元素选择器

        在标签所控制的内容的前端、后端添加标注,或选中其某部分进行样式控制(渲染)。

        格式:

/* 元素最前面加内容 */
标签名::before {
    content:"待添加的内容";
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

/* 元素最后面加内容 */
标签名::after {
    content:"待添加的内容";
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}


/* 选中元素第一行 */
标签名::first-line {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}


/* 选中元素第一个字 */
标签名::first-letter {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}


/* 修改全局选中文本样式 */
::selection {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

/* 修改某标签中选中文本样式 */
标签名::selection {
    属性名1:属性值1;
    属性名2:属性值2;
    ………………
    属性名n:属性值n
}

更多推荐