爬虫概述
——骑猪追火车
1、目录清单
1、爬虫简介
2、通用爬虫和聚焦爬虫
3、网络请求是怎么回事儿
4、网络数据抓包
2、课堂内容
2.1、爬虫简介
在各行各业如火如荼快速发展的今天,市场是决定一家公司是否可持续发展最重要的一个衡量指标,市场的定位和发展核心是对行业数据的分析,对于数据的分析必须进行大量数据的统计分析才能得到一个比较中肯的处理建议,那么问题就来了~分析市场的行业数据,从哪里才能得到呢?
每个公司都是要发展的,他们对市场上的数据很看重,就会去网络上搜索自己所需要的数据,获取并进行分析,用来指导公司的大方向。这些数据提供者是从如何得到数据的?一种是可以共享的免费数据,一种是比较有针对性的私密数据。免费数据一般都是任何人都可以浏览的,私密数据大多都是禁止查阅或者收费查阅,数据来源大致有这几个方面:
政府/机构公开的数据:中华人民共和国国家统计局数据、世界银行公开数据、联合国数据、纳斯达克。
爬取网络数据:如果需要的数据市场上没有,或者不愿意购买,那么可以选择招/做一名爬虫工程师,自己动手丰衣足食
爬虫新手5问 what? why?where?how?when?
2.2、通用爬虫和聚焦爬虫
根据爬虫的应用场景不同大致分为两种类型:
通用爬虫和聚焦爬虫
2.2.1、通用爬虫
通用爬虫是网络搜索引擎的一部分,遵循爬虫的robot协议,负责采集网络中的网页信息内容并建立索引,在自己的搜索引擎服务器上建议网络信息的索引镜像备份文件,达到对网络上的信息内容可以快速检索的目的
robot协议:是关于网络爬虫的一种约定的协议,robot协议明确告诉了通用网络爬虫,哪些数据内容是可以爬取的,哪些数据内容是不允许爬虫采集的,如果是合法合规的爬虫程序,必须遵循robot协议约定的采集内容区域,否则可能涉及到维权行为!
通用爬虫的一些局限性:
通用搜索引擎所返回的结果都是网页,而大多情况下,网页里90%的内容对用户来说都是无用的。
不同领域、不同背景的用户往往具有不同的检索目的和需求,搜索引擎无法提供针对具体某个用户的搜索结果。
万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎对这些文件无能为力,不能很好地发现和获取。
通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询,无法准确理解用户的具体需求。
针对上述局限性,聚焦爬虫技术得以广泛使用
2.2.2、聚焦爬虫
程序开发人员针对具体的需求,针对性的开发获取数据的程序,通过程序的自动化操作,完成人工筛选过程~[自定义采集方式、自定义筛选条件、自定义过滤措施->私人订制!],不需要遵循robot协议!可以获取到更加准确的数据!
so -- 我们的目标聚焦爬虫
2.3、网络请求是怎么回事儿
网络中的数据,更多的操作是对于目标服务器上网页数据的方式,网络数据的一般访问使用的都是HTTP协议和HTTPS协议,通过浏览器进行网页访问的过程中,在请求的请求头信息中包含了客户端浏览器的身份信息;在响应数据中包含了对于响应内容的描述信息等
2.3.1、HTTP协议和HTTPS协议
HTTP协议:超文本传输协议,是网页访问过程中常用的一种协议,用于传输超文本标签描述的内容,默认访问端口:80
HTTPS协议:提过了安全通道的HTTP协议,在网页数据访问过程中,对于访问的数据进行了数字签名实现了非对称数据加密方式以保障数据的安全性。默认访问端口:443
在指定的访问协议写,进行数据资源的访问,通过网络统一资源定位符URL进行访问,一般情况下,一个完整的请求URL主要包含如下几个部分:
http://www.baidu.com/s?wd=url
[访问协议]://[主机域名][:端口号]/[资源路径][?查询字符串]
2.3.2、请求方式
HTTP1.1协议标准规定了8种常规请求方式,分别如下:
- GET:定义用于从服务器获取数据
- POST:定义用于向服务器更新数据
- PUT:定义用于向服务器提交数据
- DELETE:定义用于在服务器中删除指定数据
- OPTIONS:定义客户端可以通过请求查询服务器处理信息
- HEAD:定义用于获取请求内容的报文头信息
- CONNECT:定义可以通过管道的方式连接
- TRACE:定义心跳消息诊断的实现
————————————————————————————————
常规的python项目中,在实际使用操作时我们一般使用get/post两种请求方式,通过get/post两种请求方式完成服务器之间的常规数据交互,已经可以满足我们项目的大部分情况 - GET请求:访问的url地址中可以包含传递给服务器的参数,参数必须是字符串,url地址的长度浏览器本身没有限制,但是受到服务器最大接收数据长度的限制,所以get请求一般用于传输不需要保密的长度收到限制的字符串数据。处理效率较高
- POST请求:访问的url地址中不会出现传递给服务器的参数,参数会包含在请求体中进行处理,主要传递字符串数据,可以传递二进制数据,传递数据的大小浏览器同样没有做什么限制,但是服务器端会根据实际需要进行数据量的限制,避免传递过大的数据到底服务器资源不够使用!所以post请求一般用于传递较为敏感的不能暴露给别人看到的并且数据较大的数据
2.3.3、请求头 request header
请求头信息是请求数据的重要组成部分之一,包含了客户端请求信息标示等重要信息。常见的请求头信息:
- Host:访问web资源的网络域名和端口号
- Connection: 连接类型,一般当下浏览器都会发送一个这样数据:Connection:keep-alive给对应的服务器,keep-alive是保持连接的意思,也就是长连接的意思,如果服务器支持客户端keep-alive长连接,会返回包含keep-alive的响应数据表示建立长连接,可以继续进行操作;如果服务器不支持就直接返回close关闭连接操作
- Upgrade-insecure-requests:请求升级,就是当用户在通过http协议访问当前资源数据时,自动替换为https安全访问协议并且不提示警告信息
- User-agent:用户代理,用于代理客户发起请求的工具,一般表示浏览器,描述访问网页的浏览器的信息
- Accept:接受数据类型描述;如Accept:text/html;表示客户端可以接收的数据是html网页文档数据;Accept:/;表示客户端可以接收任何数据
- Accept-encoding:接受文件的解码格式,一般传输的内容如:Accept-encoding:gzip;q=1.0;identify;q=0.5;*;q=0,表示如果有返回多种数据内容,首先匹配gzip压缩的文档内容,如果不是通过gzip压缩的格式,就匹配identify压缩编码格式;否则就接受任意编码格式的数据
- Accept-language:客户端的语言类型,当服务器支持指定的语言类型时,返回给客户端指定的国际化语言内容;
- Referer:请求来源,也就是当前网页是从哪个网页发起的请求,一般用于反盗链操作
- Cookie:发送给服务器的cookie数据,通过请求头中的cookie属性将客户端的cookie数据传递给服务器进行处理
- Content-type:内容类型,一般在POST请求中有效,表示指定post请求传递的数据的类型
2.3.4、响应头 response header
服务器正常处理了需要操作的业务之后,就会以响应的方式返回给客户端浏览器对应的数据,响应对象本身就会包含对于响应数据内容的描述信息。常见的响应头信息:
Cache-control:must-revalidate|no-cache|private
该响应头信息非常重要,如果响应头明确Cache-control:max-age=0或者no-cache表示不缓存任何数据,任何时间再次发起请求都从服务器获取新的数据;同样如果指定了Cache-control:max-age=102460*60则表示在指定的时间段获取新的数据直接从缓存中提取,不需要从服务器获取;如果响应头中不包含Cache-control信息,则所有数据全部采用默认缓存方式Connection:keep-alive|close
用于高速客户端的请求方式是否保持连接,某些情况下保持连接是必要的,可以在多次发起连接时重复使用打开的连接方式,有助于提高处理效率Content-encoding:gzip
响应内容编码方式,一般默认gzip,就是告诉客户端服务器响应的数据内容是经过gzip压缩处理的,需要客户端解压缩解码操作Content-type:text/html;charset=UTF-8
响应数据内容类型,一般直接描述内容的文件属性和编码方式,方便客户端浏览器可以针对文件属性使用指定方式进行加载,通过指定的编码方式进行解码操作正常显示加载的数据内容Date:Sat, 06 Jan 2018 02:48:36 GMT
响应数据传输时间,HTTP协议标准指定使用GMT格林尼治时间Expires:Sat, 13 Jan 2018 01:00:07 GMT
过期时间,指定某个资源的过期时间,过期之前通过缓存直接提取数据而不是从服务器获取数据Server:BWS/1.1
服务器信息描述Transfer-encoding:chunked
响应数据内容分块
2.3.5、HTTP响应状态码
状态码由三位数字组成,第一个数字定义了响应的类别,有五种情况:
- 1xx:指示信息–表示请求已接收,继续处理
- 2xx:成功–表示请求已被成功接收、理解、接受
- 3xx:重定向–要完成请求必须进行更进一步的操作
- 4xx:客户端错误–请求有语法错误或请求无法实现
- 5xx:服务器端错误–服务器未能实现合法的请求
常见的状态响应码
编码 | 描述 |
---|---|
200 | 请求已成功,请求所希望的响应头或数据体将随此响应返回。 |
400 | 客户端请求有语法错误,不能被服务器所理解 |
403 | 服务器收到请求,但是拒绝提供服务 |
404 | 请求资源不存在,eg:输入了错误的URL |
500 | 服务器发生不可预期的错误 |
and so so
2.4、网络数据抓包
进行网络爬虫程序开发之前,首先针对网络数据进行定位分析非常重要,对于网络数据的定位处理通常使用抓包工具进行操作,常用的抓包工具如浏览器F12工具、Fiddler、wireshark等等,在爬虫处理过程中,使用较多的是F12网络工具和Fiddler。