Python爬虫入门01
1. 爬虫简介
1.1 通讯协议
- 端口
数据通讯的过程分为以下三步:
- 找到对方IP
- 数据要发送到对方指定的应用程序上。为了标识这些应用程序,采用端口(数字)进行了命名,一般也叫“逻辑端口”
- 定义通讯规则,一般称之为协议
常用的协议及端口号
- 通讯协议
所谓的协议指两台计算机进行通信时必须遵守的规则和规定
国际组织定义了通用的通信协议TCP/IP协议
Http协议,也称超文本协议,其端口号为80
1.2 网络模型
- OSI参考模型
层次 | 功能 | 网络服务协议 |
---|---|---|
应用层 | 为计算机用户提供应用接口,也为用户直接提供各种网络服务 | HTTP,HTTPS(HTTP+SSL安全套接层),FTP,TFTP,DNS,SMTP |
表示层 | 编码方式,提供用于应用层数据的编码和转换功能,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。数据压缩和加密也是表示层可提供的转换功能之一。 | – |
会话层 | 建立连接,负责建立、管理和终止表示层实体之间的通信会话,由服务请求和响应组成 | – |
传输层 | 建立主机端到端的链接,为上层协议提供端到端的可靠数据服务,包括处理差错控制和流量控制。该层向高层屏蔽了下层数据通信的细节,使高层用户看大的只是在两个传输实体间的数据通路 | TCP UDP |
网络层 | 建立起始中间的连接,通过IP寻址建立连接 | IP |
数据链路层 | 传输校验,将比特组合成字节再将字节组成帧使用链路层地址(以太网使用MAC地址)访问介质,并进行差错检测 | – |
物理层 | 传输介质,规定了电平、速度和电缆针脚 | – |
- TCP/IP参考模型
应用层,包括OSI中的应用层、表示层和会话层(HTTP)
传输层
网络层
数据链路层
物理层
-
HTTPS
https = http + ssl,顾名思义,https是在http的基础上加上了ssl保护壳,信息的加密过程就是在ssl中完成的
https,是以安全为目标的HTTP通道,简单讲是HTTP的安全版 -
SSL
SSL也是一个协议,主要用于web的安全传输协议 -
Http请求和响应
HTTP通信由两部分组成:客户端请求信息和服务器响应信息
- 用户在浏览器的地址栏输入一个URL并回车后,浏览器会向HTTP服务器发送 HTTP请求,该请求主要分为Get和Post,来获取对应的html文件
- HTTP服务器响应对象,把Response文件对象发送回浏览器
- 浏览器分析Response的HTML(解析),发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。浏览器会自动再次发送Request去获取这些文件
- 当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示网页
-
客户端的Http请求
URL只是标识资源的位置,而http是用来提交和获取资源的。
客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:
请求行、请求头部、空行、请求数据 四个部分组成、 -
一个典型的HTTP请求示例
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0 # 缓存
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 # 文件接收类型
Sec-Fetch-Site: same-origin
Referer: https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=Python%20%20%E6%89%8B%E5%8A%A8%E5%9B%9E%E6%94%B6%E5%9E%83%E5%9C%BE&oq=Python%2520%25E6%2594%25B6%25E5%2588%25B0%25E5%259B%259E%25E6%2594%25B6%25E5%259E%2583%25E5%259C%25BE&rsv_pq=f5baabda0010c033&rsv_t=1323wLC5312ORKIcfWo4JroXu16WSW5HqZ183yRWRnjWHaeeseiUUPIDun4&rqlang=cn&rsv_enter=1&rsv_dl=tb&inputT=2315&rsv_sug3=48&rsv_sug2=0&rsv_sug4=2736
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: BIDUPSID=4049831E3DB8DE890DFFCA6103FF02C1;
- 请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP 0.9:只有基本的文本 GET 功能。
HTTP 1.0:完善的请求/响应模型,并将协议补充完整,定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP 1.1:在 1.0 基础上进行更新,新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
HTTP 2.0(未普及):请求/响应首部的定义基本没有改变,只是所有首部键必须全部小写,而且请求行要独立为 :method、:scheme、:host、:path这些键值对。
1.3 爬虫介绍
- 定义:代替人去模拟浏览器进行网页操作
- 需要性:可以为其他数据提供数据源、数据分析、大数据
- 获取数据的方式:
- 公司自有的数据
- 第三方平台数据(百度指数,数据堂)
- 爬虫爬取的数据
-
Python做爬虫的优势
PHP对多线程、异步支持不太好
Java代码量大,代码笨重
C/C++代码量大,难以编写
Python支持多模块,代码简洁,开发效率高(scrapy框架) -
爬虫的分类
通用网络爬虫,浏览器如baidu google yahu
聚焦网络爬虫,根据既定的目标有选择地抓取某一个特定主题内容
增量式网络爬虫,对下载网页采取增量式的更新和只爬取新产生的或已经发生变化的网页爬虫
深层网络爬虫,那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的只有用户提交一些关键词才能获取的web页面,如用户登录注册才能访问的页面
1.4 几个概念
-
GET和POST
GET查询的参数都会在URL上显示
POST查询参数和需要提交数据是隐藏在Form表单里的,不会在URL地址上显示出来(会对网页产生影响) -
URL组成部分
• URL: 统一资源定位符
• https://new.qq.com/omn/TWF20200/TWF2020032502924000.html
• https: 协议
• new.qq.com: 主机名可以将主机理解为一台名叫 news.qq.com 的机器。这台主机在 qq.com 域名下
• port 端口号: 443 /new.qq.com 在他的后面有个 :443 可以省略
• TWF20200/TWF2020032502924000.html 访问资源的路径
• #anchor: 锚点用于在前端做页面定位的
• 注意 : 在浏览器请求一个url,浏览器会对这个url进行一个编码。(除英文字母、数字和部分标识其他的全部使用% 加 十六进制码进行编码)
• 例如 : https://tieba.baidu.com/f?ie=utf-8&kw=%E6%B5%B7%E8%B4%BC%E7%8E%8B&fr=search
• %E6%B5%B7%E8%B4%BC%E7%8E%8B = 海贼王 -
User-Agent 用户代理
作用:记录用户的浏览器、操作系统等,为了让用户更好的获取HTML页面效果 -
Refer
表明当前这个请求是从哪个url过来的。一般情况下可以用来做反爬的技术 -
状态码
200 : 请求成功
301 : 永久重定向(如京东首页www.jingdong.com永久重定向www.jd.com)
302 : 临时重定向(如知乎首页,临时重定向登录界面)
403 : 服务器拒绝请求
404 : 请求失败(服务器无法根据客户端的请求找到资源(网页))
500 : 服务器内部请求
1.5 抓包工具
Elements : 元素 网页源代码,提取数据和分析数据(有些数据是经过特殊处理的,所以并不是都是准确的)
Console : 控制台 (打印信息)
Sources : 信息来源 (整个网站加载的文件,各种形式的文件)
NetWork : 网络工作(信息抓包) 能够看到很多的网页请求