L1 & L2 爬虫基础知识
1 网页爬虫
1-1 网络爬虫
网络爬虫(Web Crawler):按照一定规则自动爬取网页信息的程序。
爬虫相当于网页上爬行的蜘蛛,每爬到一个节点就能够访问该网页的信息,又称网络蜘蛛(Web Spider)。
1-2 网络爬虫的原理
源代码(Source Code):人类能够看得懂的计算机语言指令,被翻译成计算机可执行的代码。
日常浏览的网页中,既有图片、文字,还有精致的排版,这都是依靠源代码的功劳。
源代码会定义每个标题、段落、图片等排版,浏览器通过解析源代码,呈现出网页画面。
因此,爬虫获取的就是浏览器解析之前的源代码。
1-3 爬虫的应用
人类正常获取信息的方式:打开网页,点击评论区,逐条翻看信息。
网络爬虫:自动获取网页的所有信息,通过网页中的评论内容,将信息保存到文档中,便于对数据进行查看和分析。
因此,网络爬虫就是自动化从网页上获取信息、提取信息和保存信息的过程。
1-4 链接(URL)、主机名、文件路径
链接(URL,Uniform Resource Locator):统一资源定位符,指定了我们要查找资源的地址。
https://主机名/文件路径名(可省略)
主机名(hostname),主机名就是我们要访问的计算机的名字。
“//”为分隔符,表示后面的字符串是主机名。
主机名后面的“/”表明,要在后面写上文件地址,如果不写一般默认为主页。
1-5 服务器
我们访问网页资源是存在服务器中的。
服务器可用于管理资源并为用户提供服务,其特点就是运算速度快,能为大量用户服务。
服务器的种类有很多,当浏览网页时其主要作用就是将网页信息提供给浏览器,此时的服务器也被称为Web服务器。
1-6 HTTP(S)协议
超文本传输协议(http,HyperText Transfer Protocol):互联网数据传输的一种规则,它规定了数据的传输方式。HTTP协议定义了客户端和服务器之间传递消息的内容和步骤。
超文本传输安全协议(HTTPS,HyperText Transfer Protocol Secure)。
HTTP协议在进行数据传输时,内容是未加密的,传输内容可能被窃听或篡改,安全性较差。
HTTPS并非是全新的协议,只是在传输之前加了一层保护,让内容安全不易被窃听。
所以说,HTTPS协议是HTTP的安全版,使用HTTPS传输能够让传输的数据更安全。
2 链接和请求响应
2-1 HTTP协议
HTTP协议规定了浏览器和服务器之间传递消息的内容和步骤,具体如下:
- 【浏览器】会先发送HTTP请求,告诉Web服务器需要的数据。
- 【Web服务器】收到请求后,按照请求执行,并返回HTTP响应消息。
- 【浏览器】收到返回的数据后,会将源代码解析成网页展示出来。
2-2 消息请求
HTTP发送的请求(Request)消息主要包含两部分“对什么”和“怎么做”。
- “对什么”是我们前面学习的URL,就是要访问的目标。
- “怎么做”一般叫做方法,是指让Web服务器完成什么工作。
由于浏览器发送请求时,将“对什么”和“做什么”信息放在头部。所以,存放这些信息的地方又叫请求头(Request Headers)。
2-3 消息响应
在HTTP协议中:Web服务器收到请求消息后,会根据请求进行处理。并将响应(Response)消息返回给浏览器。
响应消息的头部叫做响应头(Response Headers),响应头中的数据用于告诉浏览器此次请求执行失败还是成功。
2-4 状态码
状态码是由3位数字构成,位于响应头(Response Headers)中,主要用于告知客户端的HTTP请求的执行结果。
备注:状态码数量很多,不需要去特别记忆,用到时搜索即可。
状态码 含义
1XX 告知请求的处理进度和情况
2XX 成功
3XX 表示需要进一步操作
4XX 客户端错误
5XX 服务器错误
如:状态码为200,表示执行成功,浏览器此次的请求正常执行。
状态码404 (Not Found)表示服务器无法找到请求的资源,或者,有的服务器拒绝你的请求并不想说明理由时也会提示404。
状态码503(Service Unavailable)表示服务器处于超负荷状态或正在进行停机维护,现在无法处理浏览器的请求。
3 爬虫注意事项
3-1 网络的基本规则-- robots协议
使用爬虫获取网络资源时,需要遵循网络的基本规则–robots协议。
这个协议一方面是一个爬虫技术人员需要遵守的道德准则。
另一方面,如果将爬取结果商用并获取利益,还会面临法律风险。
Robots协议是国际互联网界通行的道德规范,基于以下原则建立:
1、搜索技术应服务于人类,同时尊重信息提供者的意愿,并维护其隐私权;
2、网站有义务保护其使用者的个人信息和隐私不被侵犯。
robots.txt文件是一个文本文件,robots.txt是一个协议。robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。robots.txt文件告诉蜘蛛程序在服务器上什么文件是可以被查看的。
Robots协议用来告知搜索引擎哪些页面能被抓取,哪些页面不能被抓取;可以屏蔽一些网站中比较大的文件,如:图片,音乐,视频等,节省服务器带宽;可以屏蔽站点的一些死链接。方便搜索引擎抓取网站内容;设置网站地图连接,方便引导蜘蛛爬取页面。
3-2 爬虫的影响
1.影响服务器性能,爬虫主要请求服务器的资源,大量快速的访问服务器,会影响服务器速度,耗费服务器性能。
2.法律风险,图片、视频或摄影作品等大部分是有版权的,将抓取的内容商业化也可能带来风险。
4 动手操作:网络爬虫初次尝试
4-1 环境准备:安装requests模块
在电脑终端输入代码:pip install requests
如果在自己电脑上安装不上或安装缓慢,可在命令后面添加如下配置进行加速:pip install requests -i https://mirrors.aliyun.com/pypi/simple/
4-2 代码库准备:使用import导入requests模块
import requests
4-3 获取状态码
requests.get()函数可用于模拟浏览器请求网页的过程,是获取网页信息的主要函数,get()函数中传入要访问网页的URL,会返回一个Response对象,也就是前面说到的响应消息。
使用print输出响应消息会得到Response [200]表示响应消息中状态码为200,说明此次浏览器的请求执行成功。
使用.status_code属性就可以查看状态码,这里输出的状态码数据类型是整型。
代码功能:获取状态码
全文:
# 使用import导入requests模块
import requests
# 将网页链接赋值给url
url = "https://www.baidu.com/"
# 使用requests.get()方法获取url的内容,将结果赋值给response
response = requests.get(url)
# TODO 使用.status_code属性获取状态码,并赋值给statusCode
statusCode=response.status_code
4-4 获取网页内容
用到.text属性,该属性能够将获取到的网页信息提取出来。
代码功能:获取网页内容
全文:
# 使用import导入requests模块
import requests
# 将网页链接赋值给url
url = "https://www.baidu.com/"
# 使用requests.get()方法获取url的内容,将结果赋值给response
response = requests.get(url)
# 使用if语句判断.status_code属性获取的状态码等于200时
if response.status_code == 200:
# TODO 使用.text属性获取网页前1000个字符的内容,并赋值给content
content=response.text[:1000]
# 输出content
print(content)
# 不满足if的条件时
else:
# 输出 请求数据失败
print("请求数据失败")
4-5 HTML语言
超文本标记语言(HTML语言, HyperText Markup Language),用来定义网页内容和结构。
HTML是由一系列的标签组成,这些标签组合起来就是我们浏览器看到的网页。
标签:是用来标记内容块的,主要有两种形式成对出现和单独出现。
一、成对出现的标签
<开始标签>内容<结束标签>
结束标签只比开始标签多一个斜杠"/"。
1. <html></html>表明这是一个网页文档。
2. <head></head>标签用于定义文档的头部信息,这些信息不会展示在网页中。
3. <body></body>标签用于定义文档的主体,包含网页的图片、文字、链接、视频等多种展现形式。
二、单独标签
1. <br>就是单独出现的标签,表示换行。
2.标签是可以嵌套的。
属性:用于丰富表现形式,一般放在开始标签里,并且以属性名="属性值"的形式展现。
例如: align=“center”,这里center属性值的作用就是让标签的内容居中。
属性还可以描述内容的颜色、边框等等。
代码功能:html示例
全文:
<!DOCTYPE html>
<html>
<head>
<title>网络爬虫课程</title>
</head>
<body>
<h1 align="center">我的第一个标题-居中显示</h1>
<h2>我的第二个标题,不居中显示</h2>
<p>我的第一个段落。<br>
一些内容<br>
另一些内容<br>
</p>
</body>
</html>