Auth: 王海飞
Data:2019-01-09
Email:779598160@qq.com
github:https://github.com/coco369/knowledge
网络爬虫(Web Spider。又被称为网页蜘蛛。网络机器人,又称为网页追逐者),是一种依照一定的规则,自己主动的抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁,自己主动索引。模拟程序或者蠕虫。假设把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛。
网络蜘蛛是通过网页的链接地址来寻找网页的。从站点某一个页面(一般是首页)開始,读取网页的内容。找到在网页中的其他链接地址。然后通过这些链接地址寻找下一个网页。这样一直循环下去,直到把这个站点全部的网页都抓取完为止。假设把整个互联网当成一个站点。那么网络蜘蛛就能够用这个原理把互联网上全部的网页都抓取下来。这样看来,网络爬虫就是一个爬行程序,一个抓取网页的程序。
简单地说,网络爬虫的基本任务就是抓取网页内容。
爬虫中需要掌握如下概念:URL和URI、超文本、HTTP和HTTPS、HTTP请求头、HTTP请求体、响应、响应体、回话与Cookie、代理。
URI (Uniform Resource Identifier) 统⼀一资源标志符 URL(Universal Resource Locator) 统⼀一资源定位符
URL是URI的⼦子集, URI还包括⼀一个⼦子类URN (Universal Resource Name) 统⼀一资源名称,URN 只命名资源不不指定如何定位资源。
超文本标记语言即为⽹⻚源代码
查看源代码工具:通过浏览器对开发者工具即可查看到当前页面的源码。
HTTP (Hyper Text Transfer Protocol)
超⽂文本传输协议
HTTPS (Hyper Text Transfer Protocol over Secure Socket Layer) HTTP加⼊入SSL层,传输内容通过SSL加密 安全通道保证数据传输安全 确认⽹网站真实性
用浏览器器开发者⼯工具观察⽹网络请求过程
请求⽅方法 (Request Method)
1. GET请求的参数直接在URL⾥里里,HTTP协议本身对GET请求传递到参数的长度没有限制,但不同的浏览器会对GET请求传递的参数的长度有所限制。
2. POST请求数据⼀一般通过表单提交,提交的数据不会出现在URL里且上传的数据大小没有限制。
指定了了服务器器和客户端在交互时遵循的缓存机制,即是否要留留下缓存⻚页⾯面数据。 ⼀一般在使⽤用浏览器器访问时,都会在计算机本地留留下缓存⻚页⾯面,相当于是浏览器器中的⻚页⾯面保存和 下载选项。但是爬⾍虫就是为了了从⽹网络上爬取数据,所以⼏几乎不不会从缓存中读取数据。所以在设置的时候要侧重从服务器器请求数据⽽而⾮非加载缓存。
指定客户端可以接受的内容类型,⽐比如⽂文本,图⽚片,应⽤用等等,内容的先后排序表示客户端接 收的先后次序,每种类型之间⽤用逗号隔开。 其中,对于每⼀一种内容类型,分号 ; 后⾯面会加⼀一个 q=0.6 这样的 q 值,表示该种类型被客户端 喜欢接受的程度,如果没有表示 q=1,数值越⾼高,客户端越喜欢这种类型。 爬⾍虫的时候,⼀一般会伪造若⼲干,将想要找的⽂文字,图⽚片放在前⾯面,其他的放在后⾯面,最后⼀一定 加上/;q=0.8。
⽐如Accept: imagegif,imagex-xbitmap,imagejpeg,applicationx-shockwave- flash,applicationvnd.ms-excel,applicationvnd.ms-powerpoint,applicationmsword, textxml,textshtml:⽂文本类型,斜杠后表示⽂文档的类型,xml,或者shtml applicationxml,applicationxhtml+xml:应⽤用类型,后⾯面表示⽂文档类型,⽐比如 flash动画,excel 表格等等
imagegif,imagex-xbitmap:图⽚片类型,表示接收何种类型的图⽚片 /:表示接收任何类型,但是这⼀一条⼀一般写在最后,表示优先接收前⾯面规定的类型,然后再加 载其他类型。
Accept-Language
客户端可以接受的语⾔言类型,参数值规范和 accept的很像。⼀一般就接收中⽂文和英⽂文,有其他 语⾔言需求⾃自⾏行行添加。⽐比如:
zh-CN:中⽂文简体⼤大陆?
zh:其他中⽂文
en-US:英语美语
en:其他英语
客户端接收编码类型,⼀些网络压缩格式: Accept-Encoding: gzip, deflate, sdch。相对来说,deflate是⼀一种过时的压缩格式,现在常⽤用 的是gzip
指规定好服务器器处理理表单数据所接受的字符集,也就是说,客户端浏览器器告诉服务器器⾃自⼰己 的表单数据的字符集类型。若没有定义,则默认值为“unknown”。如果服务器器 没有包含此种字符集,就⽆无法正确接收。⼀一般情况下,在爬⾍虫时不不定义该属性,如果定义,例例 ⼦子如下:
Accept-Charset:gb2312,gbk;q=0.7,utf-8;q=0.7,*;q=0.7
浏览器器上次访问的⽹网⻚页url,uri。由于http协议的⽆无记忆性,服务器器可从这⾥里里了了解到客户端访 问的前后路路径,并做⼀一些判断,如果后一次访问的 url 不能从前⼀次访问的⻚页⾯面上跳转获得, 在⼀定程度上说明了了请求头有可能伪造。
DNT:do not track 的缩写,告诉服务器器,浏览器器客户端是否禁⽌止第三⽅方⽹网站追踪。这⼀条主要是用来保护浏览器用户隐私的,通过此功能,⽤户可以检测到跨站跟踪、cookie跟踪等等。 在爬⾍虫时⼀般都是禁⽌的。数字1代表禁⽌止追踪,0代表接收追踪,null代表空置,没有规定。
请求头的 header字段指的是当 client 浏览器器和 server 通信时对于⻓长链接如何处理理。由于http 请求是⽆无记忆性的,⻓连接指的是在 client 和server 之间建⽴立⼀一个通道,⽅便两者之间进⾏行行多次数据传输,⽽不用来回传输数据。有 close,keep-alive 等⼏几种赋值,close表示不想建⽴长连接,在操作完成后关闭链接。而keep-alive 表示希望保持畅通来回传输数据。 爬⾍一般都建⽴一个⻓链接。
当使⽤代理服务器的时候,这个就指明了代理服务器是否使用⻓链接。但是,数据在从client 到代理理服务器器,和从代理服务器到被请求的服务器器之间如果存在信息差异的话,会造成信息请求不不到,但是在⼤多数情况下,都还是能够成立的。
防⽌止⻚页⾯面被缓存, 和 cache-control类似的⼀一个字段,⼀一般爬⾍虫都写成 no-cache。
Cookie是 client 请求服务器时,服务器会返回一个键值对的数据给浏览器器,下⼀次浏览器器再访问这个域名下的网页时,就需要携带这些键值对数据,⽤来跟踪浏览器用户的访问前后路径。在爬⾍时,根据前次访问得到 cookie数据,然后添加到下⼀次的访问请求头中。
访问的服务器器主机名,⽐比如百度的 www.baidu.com。这个值在爬⾍虫时可以从 访问的 URI 中获 得。
只有当所请求的内容在指定的⽇期之后⼜经过修改才返回它,否则返回304。其⽬的是为了提高访问效率。但是在爬⾍时,不设置这个值,⽽在增量爬取时才设置⼀一个这样的值,⽤以更新信息。
当客户端接收到来自WEB服务器的 WWW-Authenticate 响应时,该头部来回应⾃己的身份验证信息给WEB服务器。主要是授权验证,确定符合服务器的要求。这个在爬⾍时按需⽽定。
一个典型的适⽤用于爬⾍虫爬取数据的伪造请求头如下所示:
“Proxy-Connection”: “keep-alive”, “Pragma”: “no-cache”, “Cache-Control”: “no-cache”, “User-Agent”: “Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36”,
“Accept”: “texthtml,applicationxhtml+xml,applicationxml;q=0.9,imagewebp,/;q=0.8”, “DNT”: “1”, “Accept-Encoding”: “gzip, deflate, sdch”, “Accept-Language”: “zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4”,
“Referer”: “https://www.baidu.com/s? wd=%BC%96%E7%A0%81&rsv_spt=1&rsv_iqid=0x9fcbc99a0000b5d7&issp=1&f=8&rsv_ bp=1&rsv_idx=2&ie=utf-8&rqlang=cn&tn=baiduhome_pg&rsv_enter=0&oq=If-None- Match&inputT=7282&rsv_t=3001MlX2aUzape9perXDW%2FezcxiDTWU4Bt%2FciwbikdOL
QHYY98rhPyD2LDNevDKyLLg2&rsv_pq=c4163a510000b68a&rsv_sug3=24&rsv_sug1=14 &rsv_sug7=100&rsv_sug2=0&rsv_sug4=7283”, “Accept-Charset”: “gb2312,gbk;q=0.7,utf-8;q=0.7,*;q=0.7”,
POST请求体有内容,GET请求体为空
可以设置Request Header Content-Type中的参数, 如下:
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单⽂文件上传
application/json 序列列化json数据 text/xml xml数据
响应状态码 (Response Status Code)
响应头,其中包含了了服务器器对请求的应答信息,如 Content-Type、Server、Set-Cookie 等, 下⾯将⼀些常用的头信息说明如下:
Date,标识 Response 产⽣生的时间。
Last-Modified,指定资源的最后修改时间。
Content-Encoding,指定 Response 内容的编码。 Server,包含了服务器的信息,名称,版本号等。
Content-Type,⽂文档类型,指定了返回的数据类型是什么,如text/html 则代表返回 HTML ⽂文 档,applicationx-javascript 则代表返回 JavaScript ⽂文件,image/jpeg 则代表返回了了图⽚片。 Set-Cookie,设置Cookie,Response Headers 中的 Set-Cookie即告诉浏览器器需要将此内容 放在 Cookies 中,下次请求携带 Cookies 请求。
Expires,指定 Response 的过期时间,使⽤用它可以控制代理理服务器器或浏览器器将内容更更新到缓 存中,如果再次访问时,直接从缓存中加载,降低服务器器负载,缩短加载时间。
响应体最重要的当属响应体内容了,响应的正⽂数据都是在响应体中,如请求一个⽹页, 它的响应体就是⽹页的HTML 代码,请求一张图片,它的响应体就是图片的⼆进制数据。所以最主要的数据都包含在响应体中了,我们做爬⾍时请求⽹页后要解析的内容就是解析响应体。
html, css, javascript