目录
1. 爬虫的概念
网络爬虫(又被称为网页蜘蛛,网络机器人)就是模拟浏览器发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
1.1 数据的来源
-
去第三方的公司购买数据
-
去免费的数据网站下载数据
-
通过爬虫爬取数据
-
人工收集数据
1.2 爬取到的数据用途
- 进行在网页或者是app上进行展示
- 进行数据分析或者是机器学习相关的项目
2. 爬虫的分类
根据被爬网站的数量的不同,我们把爬虫分为:
-
通用爬虫 :通常指搜索引擎的爬虫(https://www.baidu.com)
-
聚焦爬虫 :针对特定网站的爬虫
3. 爬虫的流程
3.1 获取到资源地址
爬虫第一步要做的工作就是获取数据的资源地址,有了准确的地址之后我们才能数据去进行发送请求
3.2 发送请求获取数据
第二步要做的工作就是获取网页,这里就是获取网页的源代码。
方式:
requests.get(url=url)
requests.post(url=url,params=params)
在post请求中多了请求参数,是否需要加headers,cookies需要根据网站的检测来定。
3.3 提取信息
第三步 获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。
方式:
1. 正则表达式 re模块 :match search findall 方法
2. Xpath 或 Css :如Beautiful Soup、pyquery、lxml库
3.4 保存数据
第四步 提取信息后,进行持久化存储。
方式:
1. 文本格式:TXT ,JSON
2.数据库: MySQL , MongoDB,Redis
4. 代码模块
# 首先导入requests模块
import requests
# 请求模块,获取相应
def get_data():
pass
# 解析数据
def parse_data():
pass
# 保存数据
def save_data():
pass
5. HTTP请求的形式
请求,由客户端向服务端发出,可以分为 4 部分内容:请求方法(Request Method)、请求的网址 (Request URL)、请求头(Request Headers)、请求体(Request Body)。
5.1 面板组成
5.2 请求方法
作用:让协议清楚的知道,客户端发送了一个什么类型的‘动作指令’
方 法 | 描 述 |
---|---|
GET | 请求页面,并返回页面内容 |
HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
POST | 大多用于提交表单或上传文件,数据包含在请求体中 |
PUT | 从客户端向服务器传送的数据取代指定文档中的内容 |
DELETE | 请求服务器删除指定的页面 |
CONNECT | 把服务器当作跳板,让服务器代替客户端访问其他网页 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,主要用于测试或诊断 |
5.3 请求的网址
请求的网址,即统一资源定位符 URL,它可以唯一确定我们想请求的资源。
https://www.baidu.com/item/10056474?fr=aladdin
http://IP:port/资源路径/?wd=python#flg
协议 :这代表网页使用的请求协议
域名部分:该URL的域名部分为“www.baidu.com”。一个URL中,也可以使用IP地址作为域名使用:202.108.22.5
端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分。
资源部分:从域名后的最后一个“/”开始到“?”为止,是资源部分
查询参数:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分
锚点:打开用户页面时滚动到该锚点位置
5.3 请求体
请求体一般承载的内容是 POST 请求中的表单数据,而对于 GET 请求,请求体则为空。
5.6 响应
响应,由服务端返回给客户端,可以分为三部分:响应状态码(Response Status Code)、响应头 (Response Headers)和响应体(Response Body)。
5.6.1 响应状态码
状态码 | 说 明 | 详 情 |
---|---|---|
100 | 继续 | 请求者应当继续提出请求。服务器已收到请求的一部分,正在等待其余部分 |
101 | 切换协议 | 请求者已要求服务器切换协议,服务器已确认并准备切换 |
200 | 成功 | 服务器已成功处理了请求 |
201 | 已创建 | 请求成功并且服务器创建了新的资源 |
202 | 已接受 | 服务器已接受请求,但尚未处理 |
203 | 非授权信息 | 服务器已成功处理了请求,但返回的信息可能来自另一个源 |
204 | 无内容 | 服务器成功处理了请求,但没有返回任何内容 |
205 | 重置内容 | 服务器成功处理了请求,内容被重置 |
206 | 部分内容 | 服务器成功处理了部分请求 |
300 | 多种选择 | 针对请求,服务器可执行多种操作 |
301 | 永久移动 | 请求的网页已永久移动到新位置,即永久重定向 |
302 | 临时移动 | 请求的网页暂时跳转到其他页面,即暂时重定向 |
303 | 查看其他位置 | 如果原来的请求是 POST,重定向目标文档应该通过 GET 提取 |
304 | 未修改 | 此次请求返回的网页未修改,继续使用上次的资源 |
305 | 使用代理 | 请求者应该使用代理访问该网页 |
307 | 临时重定向 | 请求的资源临时从其他位置响应 |
400 | 错误请求 | 服务器无法解析该请求 |
401 | 未授权 | 请求没有进行身份验证或验证未通过 |
403 | 禁止访问 | 服务器拒绝此请求 |
404 | 未找到 | 服务器找不到请求的网页 |
405 | 方法禁用 | 服务器禁用了请求中指定的方法 |
406 | 不接受 | 无法使用请求的内容响应请求的网页 |
407 | 需要代理授权 | 请求者需要使用代理授权 |
408 | 请求超时 | 服务器请求超时 |
409 | 冲突 | 服务器在完成请求时发生冲突 |
410 | 已删除 | 请求的资源已永久删除 |
411 | 需要有效长度 | 服务器不接受不含有效内容长度标头字段的请求 |
412 | 未满足前提条件 | 服务器未满足请求者在请求中设置的其中一个前提条件 |
413 | 请求实体过大 | 请求实体过大,超出服务器的处理能力 |
414 | 请求 URI 过长 | 请求网址过长,服务器无法处理 |
415 | 不支持类型 | 请求格式不被请求页面支持 |
416 | 请求范围不符 | 页面无法提供请求的范围 |
417 | 未满足期望值 | 服务器未满足期望请求标头字段的要求 |
500 | 服务器内部错误 | 服务器遇到错误,无法完成请求 |
501 | 未实现 | 服务器不具备完成请求的功能 |
502 | 错误网关 | 服务器作为网关或代理,从上游服务器收到无效响应 |
503 | 服务不可用 | 服务器目前无法使用 |
504 | 网关超时 | 服务器作为网关或代理,但是没有及时从上游服务器收到请求 |
505 | HTTP 版本不支持 | 服务器不支持请求中所用的 HTTP 协议版本 |
5.6.2 响应头
响应头包含了服务器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等
-
Date:标识响应产生的时间。
-
Last-Modified:指定资源的最后修改时间。
-
Content-Encoding:指定响应内容的编码。
-
Server:包含服务器的信息,比如名称、版本号等。
-
Content-Type:文档类型,指定返回的数据类型是什么,如 text/html 代表返回 HTML 文档,
-
application/x-javascript 则代表返回 JavaScript 文件,image/jpeg 则代表返回图片。
-
Set-Cookie:设置 Cookies。响应头中的 Set-Cookie 告诉浏览器需要将此内容放在 Cookies 中,下次请求携带 Cookies 请求。
-
Expires:指定响应的过期时间,可以使代理服务器或浏览器将加载的内容更新到缓存中。如果再次访问时,就可以直接从缓存中加载,降低服务器负载,缩短加载时间。
5.6.3 响应体
爬虫请求网页后,要解析的内容就是响应体
类型:
请求网页时,它的响应体就是网页的 HTML 代码
请求图片时,它的响应体就是图片的二进制数据