搞了一大轮环境配置,终于开始学习爬虫的基础知识了!
2.1、 HTTP基本原理
URI: Uniform Resource Identifier 统一资源标志符
URL: Universal Resource Locatior 统一资源定位符
URL是URI的子集,,每个URL都是URI,但不是每个URI都是URL。URI还包括一个子类叫URN,统一资源名称
超文本: 网页的源代码HTML。
HTTP和HTTPS:
HTTP: 超文本传输协议: 用于从网络传输超文本数据到本地浏览器的传送协议,能保证高交岙准确地传送超文本文档。
HTTPS: 以安全为目标的HTTP通道。 即HTTP下加入SSL层。建立一个信息安全通道来保证数据传输的安全,并确认网站的 真实性。(在地址栏有个锁头标志来表示,也可以通过CA机构颁发的安全签章来查询)
若要爬取HTTPS站点,就需要设置忽略证书的选项,否则会提示SSL链接错误。
HTTP请求过程
浏览器向网站所在服务器发送一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。
可以通过浏览器的开发者工具的网络功能来观察网络请示如何发生,有以下这些指标:
Name: 请求的名称
Status: 响应的状态码, 200为正常
Type: 请求的文档类型
Intiator: 请求源, 用来标记请求是由哪个对象或进程发起的。
Size: 从服务器下载的文件和请求的资源大小
Time: 发起请求到获取响应的所用的总时间。
Waterfall: 网络请求的可视化瀑布流
更详细的信息
General: Request URL为请求的URL, Request Method为请求的方法, Status Code为响应状态码, Remote Address为远程服务器的地址和端口
Response Headers: 响应头
Request Headers: 请求头
请求 : 由客户端向服务器端发出,可以分为4部分内容
1)请求方法: GET和POST,GET请求参数直接包含在URL中,最多只有1024字节;POST与表单一起提交。
其他请求方法:
GET,请求页面;
HEAD,用于获取报头;
POST,用于提交表单或上传文件,数据包在请求体中;
PUT,从客户端向服务器传送的数据取代指定文档中的内容;
DELETE,请求服务器删除指定页面;
CONNECT,把服务器当作跳板,让服务器代替客户端访问其他网页;
OPTIONS,允许客户端查看服务器的性能;
TRACE,回显服务器收到的请求,主要用于测试或诊断。
2)请求网址 URL
3)请求头 用来说明服务器要使用的附加信息。
Accept: 请求报头域,用于指定客户端可接受哪些类型的信息
Accept-Language: 指定客户端可接受的语言类型
Accept-Encodeing: 指定客户端可接受的内容编码
Host: 用于指定请求资源的主机IP和端口号,其内容为请求URL的原始服务器或网关的位置。
Cookie:网站为辨别用户进行会话跟踪面存储在用户本地的数据, 主要功能是维持当前访问会话。
Referer: 用来标识这个请求是从哪个页面发过来的,服务器可作为来源统计、防盗链处理。
User-Agent:可以使用服务器识别客户使用的操作系统及版本、浏览器及版本等信息。在做爬虫时加上此信息,可伪装为浏览器,否则,会被识别出爬虫。
Content-Type: 互联网媒体类型或MIME类型,表示具体请求中的媒体类型信息,例如: text/html, image/gif等
请求头是请求的重要组成部分,在写爬虫时,大部分情况下都需要设定请求头。
4)请求体: 一般承载的内容是POST请求中的表单数据,而对于GET请求,请求体则为空。
Request Headers中指定Content-Type为application/x-www-form-urlencoded,才会以表单数据的形式提交。
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单文件上传
application/json 序列化JSON数据
text/xml XML数据
响应:由服务器端返回客户端,分为三部分:响应状态码、响应头和响应体
1) 响应状态码: 表示服务器的响应码, 200表示正常响应,404表示网页未找到;500代表服务器内部发生错误。
2) 响应头: 包含了服务器对请求的应答信息
Date: 标识响应产生的时间
Last-Modified: 指定资源的最后修改时间
Content-Encoding: 指定响应内容的编码
Server: 包含服务器的信息
Content-Type: 文档类型,指定返回的数据类型是什么
Set-Cookie 设置Cookies
Expires: 指定响应的过期时间
3)响应体 最重要的内容, 做爬虫请求网页后,要解析的内容就是响应体。
2.2 网页基础
网页组成: 网页由HTML、CSS和JavaScript三大部分组成。
网页结构:一个网页的标准形式是html标签内嵌head和body标签, head内定义网页的配置和引用, body内定义网页的正文。
在HTML中,所有标签定义的内容都是节点,它们构成一个HTML DOM树。DOM(Document Object Model 文档对象模型)。
DOM标准初分为3个不同的部分:
核心DOM: 针对任何结构化文档的标准模型
XML DOM: 针对XML文档的标准模型
HTML DOM: 针对HTML文档的标准模型
整个文档是一个文档节点,每个HTML元素是元素节点,HTML元素内的文本是文本节点,每个HTML属性是属性节点,注释是注释节点。
选择器
在CSS中,我们使用CSS选择器来定位节点, CSS选择器还支持嵌套选择,各个选择器之间加个空格分隔开便可以代表嵌套关系。
2.3 爬虫的基本原理
爬虫就是获取网页并提取和保存信息的自动化程序。
1、获取网页:获取网页的源代码,从源代码中获取有用信息,向服务器发送一个请求,返回的响应体就是网页源代码。最关键的部分是构造一个请求并发送给服务器,然后接收到响应并将其解析出来。可通过Python提供的urlllib、requests等来实现。
2、提取信息:获取网页源代码后,接下来就分析源代码,从中提取想要的数据,通过采用正则表达式提取,通过CSS选择器或XPath来提取网页信息的库(BeautifulSoup、pyquery、lxml等)提取网页信息。
3、保存数据:将提取的信息,以TXT或JSON文本保存,或保存到数据库。
4、自动化程序:爬虫可以代替人来完成这些操作。
能抓怎样的数据: HTML代码、JSON字串、二进制数据(图片、视频和音频)、CSS和Javascript文件。
对于Javascript渲染页面的内容,或通过ajax后台调用,可使用Selenium和Splash来模拟Javascript渲染。
2.4 会话和Cookies
很多网站需要实现用户注册和登录后才可以看到需要的内容,这种登录凭证是会话和Cookies共同产生的结果。
无状态HTTP:指HTTP协议对事务处理是没有记忆能力的,也就是说服务器不知道客户端是什么状态。服务器完成响应后,就不会记录前后状态的变化。
为解决无状态HTTP,保持HTTP连接状态,分别使用会话和Cookies,会话在服务端,也就是网站的服务器,用来保存用户的会话信息;Cookies在客户端或浏览器端,浏览器在下次访问时会自动附带上Cookies发送给服务器,服务器通过识别Cookies并鉴定哪个用户,然后再判断用户是否是登录状态,然后返回对应的响应。
会话: 在Web中,会话对象用来存储特定用户会话所需的属性及配置信息。在Web页之间跳转时,存储在会话对象中的变量将不会丢失。
Cookies: 指某些网站为了辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据。
会话维持:利用Cookies保持状态,
1)客户端第一次请求服务器时,服务器会返回一个请求头中带有Set-Cookie字段的响应给客户端,用来标记是哪一个用户,并保存起来。
2)下一次再请求该网站,浏览器会把Cookies放到请求头一起提交给服务器,Cookies携带会话ID信息,服务器检查该Cookies即可找到对应的会话是什么,然后再判断会话来以此辨认用户状态。
Cookies和会话需要配合,一个处于客户端,一个处于服务端,二者共同协作就实现登录会话控制。
Cookies属性结构
Name: Cookies名称
Value: Cookies的值, 值为Unicode字符,需要为字符编码;值为二进制数,则使用BASE64编码。
Domain:可以访问该Cookies的域名
Expires/Max Age: Cookies失效时间,
Path: Cookies使用路径。
Size:Cookies的大小
HTTP字段:Cookies的httponly属性, true时只有HTTP头中会带有Cookies信息。
Secure: 该Cookies是否仅被使用安全协议传输。即HTTPS和SSL。
对于会话,除非程序通知服务器删除,否则服务器会一直保留该会话。由于服务器为会话设置一个失效时间,当客户端上一次使用会话的时间超过这个失效时间,服务器就认为客户端已停止了活动,才会把会话删除以节省存储空间。
2.5 代理的基本原理
由于网站可能采取一些反爬虫措施,使在爬虫时会出现错误,所以使用代理来实现IP伪装。
基本原理:
代理指的是代理服务器, proxy server,代理网络用户去取得网络信息。本机通过代理服务器访问Web服务器,然后Web服务器又通过代理服务器将返回的响应转发给本机,而Web服务器识别的真实IP地址就不是本机的IP地址,成功实现IP伪装。
代理的作用:突破自身IP访问限制、访问一些单位或团体内部资源、提高访问速度、隐藏真实IP。
爬虫代理:在爬取过程中通过不断更换代理,就不会被封锁。
代理分类:
根据协议区分: FTP代理服务器、HTTP代理服务器、SSL/TLS代理、RTSP代理、Telnet代理、POP3/SMTP代理和SOCKS代理。
根据匿名程序区分:高度匿名代理、普通匿名代理、透明代理和间谍代理。
常见代理设置: 使用网上的免费代理、使用付费代理服务、ADSL拔号