【一】爬虫基础
基础概念
URI
URI
(Uniform Resource Identifier
,统一资源标识符)是一个用于标识某一互联网资源名称的字符串。该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作。URI
由包括确定语法和相关协议的方案所定义。
Web上可用的每种资源,如,HTML文档、图像、视频片段、程序等,由一个通用资源标识符(Uniform Resource Identifier
, 简称URI
)进行定位。
URL
因特网上的可用资源可以用简单字符串来表示,而这些字符串则被称为URL
(Uniform Resource Locator
,简称URL
,统一资源定位器)。一个URL由以下几个部分组成:
scheme
:表示访问协议,比如http、https、ftp等;host
:主机名,域名,比如,www.csdn.net;port
:端口号,比如http协议默认使用80端口,https默认端口是443;path
:查找路径,比如https://blog.csdn.net/nav/ai
后面的/nav/ai
就是path;query-string
:查询字符串,比如https://www.baidu.com/s?wd=URL
后面的wd=URL
就是查询字符串;anchor
:锚点,前端用来做页面定位。一些前后端分离的项目,也用锚点来做导航;
在浏览器中请求一个URL,浏览器会对URL进行一个编码。除了英文字母、数字和部分符号外,其它字符都会用%+十六进制码值
的组合进行编码。
Http协议
HTTP协议(Hyper Text Transfer Protocol
,简称HTTP
,超文本传输协议)是一个简单的请求-响应协议;
HTTPS协议是在HTTP 的基础下加入SSL,SSL是HTTPS 的安全基础,通过传输加密和身份认证保证了传输过程的安全性。
常见的8种请求方法
HTTP协议中定义了8种方法:
GET
: 通过给定的URI从给定服务器中检索信息,使用GET方法的请求应该只是检索数据,并且不应对数据产生其他影响。HEAD
: 与GET方法相同,但没有响应体,仅传输状态行和标题部分。POST
: 用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。PUT
: 用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。DELETE
: 用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。CONNECT
: 用来建立到给定URI标识的服务器的隧道;它通过简单的TCP/IP隧道更改请求连接,通常实使用解码的HTTP代理来进行SSL编码的通信(HTTPS)。OPTIONS
: 用来描述了目标资源的通信选项,会返回服务器支持预定义URL的HTTP策略。TRACE
: 回显服务器收到的请求,主要用于测试和诊断。
常见的请求头参数
在HTTP协议中,向服务器发送一个请求,数据分为三部分:第一个是把数据放在URL中;第二个是把数据放在body中(在post请求中);第三个就是把数据放在Header
中。客户端向服务区发送请求时带的Header
,称之为请求头,下面介绍一些会经常用到的请求头参数:
Accept
:表示当前浏览器可以接受的文件类型。Accept-Encoding
:表示当前浏览器可以接受的数据编码,如果服务器吐出的数据不是浏览器可接受的编码,就会产生乱码。Accept-Language
:表示当前使用的浏览语言。Accept-Charset
:表示当前浏览器可接受的字符集。Authorization
:授权信息,通常出现在对服务器发送的WWW-Authenticate
头的应答中。Connection
:表示是否需要持久连接。Content-Length
:表示请求消息正文的长度。Host
:初始URL中的主机和端口User-Agent
:浏览器名称。这个在网络爬虫中经常会被使用到。请求一个网页的时候,服务器通过这个参数就可以知道这个请求是由哪种浏览器发送的。如果我们是通过爬虫发送请求,那么我们的User-Agent
就是Python
,这对于那些有反爬虫机制的网站来说,可以轻易的判断你这个请求是爬虫。因此我们要经常设置这个值为一些浏览器的值,来伪装我们的爬虫。Referer
:表明当前这个请求是从哪个URL过来的。这个一般也可以用来做反爬虫技术。如果不是从指定页面过来的,那么就不做相关的响应。Cookie
:http协议是无状态的。也就是同一个人发送了两次请求,服务器没有能力知道这两个请求是否来自同一个人。因此这时候就用cookie来做标识。一般如果想要做登录后才能访问的网站,那么就需要发送cookie信息了。
常见的响应状态码
200
:请求成功。301
:永久重定向。302
:临时重定向。400
:请求的URL在服务器上找不到。403
:服务器拒绝访问。500
:服务器内部错误。
TPS、QPS
TPS
:每秒传输的事物处理个数(Transactions Per Second
),即服务器每秒处理的事务数。
一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
QPS
:每秒查询率(Queries-per-second
),是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
因特网上,经常用每秒查询率来衡量域名系统服务器的机器性能,即为QPS
。对应fetches/sec
,即每秒的响应请求数,也即是最大吞吐能力。
流量
数据传输速率的常用单位为bps
,也就是每秒传送的位数(bits per second
)。数据通常是串行传输的,即一个比特接一个比特地传输。数据速率的单位是比特每秒(bps
),含义是每秒串行通过的位数。
bit:信息技术中的最小单位。
Byte:字节,文件大小(例如文本或图像文件)通用的计量单位。
1 Byte = 8 Bits
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
我们通常说的10M带宽,实际上是 10M bps , 1.25MB/s
开发环境
开发工具
常用python包
re
urllib3
requests
xpath
beautifulsoup4
selenium
Scrapy
PySpider