爬虫基础
2.1 HTTP基本原理
2.1.1 URI和URL
举个例子:
http://github.com/favicon.ico
它是一个URL,也是一个URI,我们用URI/URL来唯一指定它的访问方式
访问协议:https
访问路径(/即根目录)和资源名称favicon.ico,通过这样一个链接,就可以在互联网上找到这个资源
URL是URI的子集,即每个URL都是URI,但不是每个URI都是URL
怎样的URI不是URL呢?
URI还包括一个子类叫做URN(Universal Resource Name) -----统一资源名称
URN只命名资源而不指定如何定位资源,比如urn:isbn:xxxxxxx指定了一本书的ISBN可以唯一标识这本书
URN用得少
一般的网页链接,我们既可以称之为URL也可称之为URI
2.1.2 超文本
超文本(hypertext)
我们在浏览器看到的网页就是超文本解析而成,其源代码是一系列的HTML代码(内含标签等)
在网页按F12,可以打开浏览器的开发者工具,这时候在Elements选项卡中可以看到网页的源代码
2.1.3 HTTP和HTTPS
URL的开头会有http或https,这就是访问资源需要的协议类型,我们还会看到ftp,sftp,smb开头的URL,它们都是协议类型
有些网站虽然使用https,但提示不是私密链接,它的数据依旧经过SSL加密,如果要爬取这样的站点,就需要设置忽略证书的选项,否则会提示SSL链接错误。
2.1.4 HTTP请求过程
我们在浏览器中输入一个URL,回车后可看到网页内容,这个过程是浏览器向服务器发送一个请求,网站服务器接受请求后会进行处理和解析,然后传回浏览器,响应包含了页面的源代码,浏览器对其进行解析后呈现出来。
网络请求返回的含义
-
第一列Name:请求的名称,一般会将URL的最后一部分内容当作名称 -
第二列Status:相应的状态码,这里显示为200,代表响应是正常的,通过状态码判断发送请求后是否得到正常的响应 -
第三列Type:请求文档类型 -
第四列Initiator:请求源,用来标记请求是由哪个对象或进程发起的 -
第五列Size:资源和文件大小 -
第六列Time:发起请求到获得响应的时间 -
第七列Waterfall:网络请求的可视化瀑布流
点击这个条目可以获得更详细的信息
2.1.5 请求
1.请求方法
GET和POST
-
GET:输入网址按下回车,便是发起一个GET请求 -
POST:大多数在表单提交时发起
区别:
- GET请求一般包含在URL中,数据可以在URL中看到,而POST请求通过表单形式传输的,URL不包含,会出现在请求体中
- GET请求提交的数据最多只有1024字节,而POST无限制
2.请求的网址
即统一资源定位符URL,他可以唯一确定我们想请求的资源
3.请求头
请求头,用来说明服务器使用的附加信息,比较重要的信息有cookie,referer,user-agent
-
Accept:请求报头域,用于指定客户端可接受哪些类型的信息 -
Accept-Language:指定客户端可接受的语言类型 -
Accept-Encoding:指定客户端可接受的内容编码 -
Host:用于指定请求资源的主机IP号和端口号,其内容为请求的URL的原始服务器或网关的位置 -
Cookie:保存一些历史记录之类的 -
Referer:标识这个请求从哪个页面发来,服务器拿到这个信息做相应的处理,比如统计,防盗链 -
User-Agent:UA,爬虫要伪装 -
Content-Type:互联网媒体类型
4.请求体
一般承载post请求的表单数据,对于get请求,请求体则为空
2.1.6 响应
1.响应状态码
200 -----服务器正常响应
404 -----页面未找到
等等
2.响应头
3.响应体
开发者工具中Preview,可看到网页源代码,就是响应体的内容
2.2 网页基础
2.2.1 网页的组成
HTML+CSS+JavaScript
2.2.2 网页的结构
2.2.3 节点数及节点间的关系
在html中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树。
DOM是W3C(万维网联盟)的标准,其全称文档对象模型。它定义了访问HTML和XML文档的标准:
W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容,结构,样式。
W3C的HTML DOM标准,HTML文档中的所有内容都是节点:
- 整个文档是一个文档节点。
- 每个HTML元素是元素节点
- HTML元素内的文本是文本节点
- 每个HTML属性是属性节点
- 注释是注释节点
2.2.4 选择器
2.3 爬虫的基本原理
2.3.1 爬虫概述
1.获取网页
2.提取信息
3.保存数据
4.自动化程序
2.3.2 能抓怎样的数据
抓取html代码,或者json字符串。
二进制数据(图片,视频,音频)
2.3.3 JavaScript渲染页面
2.4 会话和Cookies
2.4.1 静态网页和动态网页
静态网页:html和css写出来的简单网页,可维护性差,不能根据URL灵活多变地显示内容
动态网页:JSP,PHP,Python等语言编写复杂的动态网页
2.4.2 无状态HTTP
HTTP协议对事物处理是没有记忆能力的,也就是服务器不知道客户端是什么状态,当我们向服务器发送请求,服务器响应,这过程是完全独立的,服务器不会记录前后状态的变化。
cookies会记录,有了它,只需要在下次请求携带Cookies发送请求而不必重新输入用户名,密码等信息重新登陆了。
1.会话:网页跳转时传递信息
2.cookies:会话维持,属性结构F12----Application----storage----cookies
2.5 代理的基本原理
2.5.1 基本原理
相当于在本机服务器和发送过去的服务器间搭了一座桥,在三者之间传递
2.5.3 爬虫代理
2.5.4 代理分类
1.根据协议分类
2.根据匿名程度划分
2.5.5 常见代理设置
- 网上的免得代理
- 付费代理
- ADSL拨号:拨一个号换一个IP,稳定性较高
|