HTTP与HTTPS
HTTP是一个客户端和服务器端请求和应答的标准(TCP)。通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。这个客户端叫用户代理(UserAgent)。响应的服务器上存储着资源,比如HTML文件和图像,这个服务器为源服务器(Origin Server),在用户代理和服务器中间可能存在多个中间层,比如代理、网关或者隧道(Tunnels)。
通常,由HTTP客户端发起一个请求,HTTP服务器一旦收到请求,服务器发回一个状态行(比如“HTTP/1.1 200 OK”)和(响应的)消息P。
HTTP协议传输的数据都是未加密的,也就是明文的数据,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而诞生了HTTPS。TLS/SSL中使用了非对称加密、对称加密以及HASH算法。
由于HTTPS非常安全,攻击者无法从中找到下手的地方,因此更多地采用假证书的手法来欺骗客户端,从而获取明文的信息。
请求头
请求头描述客户端向服务器发送请求时使用的协议类型、所使用的编码以及发送内容的长度等。检测请求头是常见的反爬虫策略,因为服务器会对请求头做一次检测来判断这次请求是人为还是非人为的。为了形成一个良好的代码编写规范,无论网站是否做Headers反爬虫机制,最好每次发送请求都添加请求头。
请求头的参数如下:
- Accept: text/html,image/* (浏览器可以接收的类型)
- Accept-Charset: ISO-8859-1 (浏览器可以接收的编码类型)
- Accept-Encoding: gzip, compress (浏览器可以接收压缩编码类型)
- Accept-Language: en-us, zh-cn (浏览器可以接收的语言和国家类型)
- Host: 请求的主机地址和端口。
- If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT(某个页面的缓存时间)
- Referer: 请求来自于哪个页面的URL.
- User-Agent: Mozilla/4.0 (compatible, MSIE 5.5, Windows NT 5.0, 浏览器相关信息)
- Cookie: 浏览器暂存服务器发送的信息
- Connection: close(1.0)/Keep-Alive(1.1) (HTTP请求版本的特点)
- Date: Tue, 11 Jul 2000 18:23:51 GMT(请求网站的时间)
- Upgrade-Insecure-Requests: 告诉服务器,浏览器可以处理HTTPS协议
- X-Requested-With: 判断是否Ajax请求
在网络爬虫中,请求头一定要有User-Agent,其他的属性可以根据实际进行添加,因为反爬虫通常检测请求头的Referer和User-Agent,而Cookie不能添加到请求头。
Cookies
Cookies也可以称为Cookie,指某些网站为了辨别用户身份、进行Session跟踪而储存在用户本地终端上的数据。
多数需要登录的网站通常会在用户登录后将用户信息写入Cookies,并且每个请求中都将Cookies中的信息返回到服务器。
HTML
一个完整的网页必定以<html></html>为开头和结尾,整个HTML可分为两部分:
- <head></head>,主要是对网页的描述、图片和JavaScript的引用。在元素中可以插入脚本(scripts)、样式文件(CSS)及各种meta信息。该区域可添加的元素标签<title>、<style>、<meta> 、<link>、<script>、<noscript>、和。
- <body></body>是网页信息的主要载体。
HTML标签 | 中文释义 |
---|---|
Img | 图片 |
A | 锚 |
Strong | 加重(文本) |
Em | 强调(文本) |
I | 斜体字 |
B | 粗体(文本) |
Br | 换行 |
Div | 分隔 |
Span | 范围 |
Ol | 排序列表 |
Ul | 不排序列表 |
Li | 列表项目 |
Dl | 定义列表 |
h1~h6 | 标题1到标题6 |
P | 段落 |
Tr | 表格中的一行 |
Td | 表格中的一个单元格 |
Th | 表格中的表头 |
JavaScript
JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型,用来给HTML网页增加动态功能。
JSON
JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式,采用完全独立于编程语言的的文本格式来存储和表示数据。
在JS语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。JSON格式说明如下:
- 对象表示为键值对。
- 数据由逗号分隔。
- 花括号保存对象。
- 方括号保存数组。
MyJSon = {
"name": "Python",
"address": {"province": "广东", "city": "广州"}
}
Ajax
Ajax不是一种新的编程语言,而是一种用于创建更好、更快以及交互性更强的Web应用程序的技术。主要是前端数据加载和渲染技术,其响应内容大部分以JSON格式为主。
Ajax在浏览器与Web服务器之间使用异步数据传输(HTTP请求),这样就可以使用网页从服务器请求少量的信息,而不是整个页面。触发事件后,如果网页没有发生刷新,数据就自动生成,说明数据的加载是通过Ajax生成并渲染到网页上的;反之,数据是通过服务器后台生成并加载的。