背景
如果大家有看马云近期在不同场合的演讲,肯定发现了一个高频词:IT与DT时代,我们现在已经是DT时代了。
DT:Data Technology
IT:Information technology
那重要的就是Data,而数据要怎么为我们所用呢?大家首先想到的,肯定是搜索引擎(Google, Baidu,Yahoo等
)。
概念
我们可以在上面找到我们所想要的任何数据,如果你目的性很强,可以到指定网站去查询。比方说全球最大的WiKi网站,维基百科,国内也有各种百科,自己去搜索吧。
这些数据都是存在网络上的,如果我们想进行一些数据分析,那些只在网络上的数据是很难被处理的。
所以我们回到了今天的主题:数据爬取
数据爬取简而言之:通过一种数据下载手段将网络上的数据copy到本机。
数据爬取,一般也就是指的网页数据爬取,也被称为“网络蜘蛛”。
实战
爬虫程序也被看做是最好的语言入门练手项目,Java,Python,Golang等等,都有很好的开源库。Python应该是这方面的鼻祖。
Java: webmagic
分析
爬虫程序的最最基础:HTTP协议
HTTP协议我不展开讲,只要满足基本的HTTP协议请求就能够得到正常的数据,剩下的就是解析HTML元素了。
这里主要提一个点: header,这个是爬虫程序最至关重要的。因为现在网站数据都会采取各种限制,以防止数据被恶意的爬取而被利用。特别是像淘宝、天猫、京东等电商类网站。
header里面可以设置以下key:
- cookie
- user-agent
- accept-encoding
- accept-language
- referer
- cache-control
其中最为关键的是
- cookie
- user-agent
- referer
cookie,user-agent 自不必多说,网上随随便便一搜索就能讲的很清楚。
我单独把referer拿出来说一下,主要是在实战中发生因为未设置referer而导致URL请求无响应。URL(淘宝商品XXX),不管是通过浏览器,还是curl等访问,都不会得到任何结果。返回状态码204 No Content
。
HTTP来源地址(referer,或HTTP referer),是HTTP表头的一个字段,用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着HTTP referer,目前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。来源地址
referer 被用于防盗链,比方说淘宝、七牛。
扩展阅读
要解决上面的URL无法得到数据的问题,很简单(设置header信息,特别是cookie,referer),referer这个的防盗链设置跟服务器端的校验有关,不一定每个URL都需要设置的。
还需要注意的是在解析返回结果的时候,要通过gzip来解压,因为我们请求的时候在header里面设置了 `accept-encoding: gzip,deflate,sdch”
说了这么多,有点混乱,凑合着看吧。
总结
HTTP协议是最最基础的内容,每个开发人员必须要熟悉,并且要不断的温故而知新。
小技巧
chrome 小技巧,打开审查元素,然后切换至Network,当我们浏览访问URL的时候,这里会将网页请求资源逐一显示出来,我们可以针对自己需要的资源点击右键,然后会弹窗出来很多可选择的功能项,我要说的是copy as cURL,不妨告诉你们,我就是通过这个完整数据,知道上面URL访问失败的原因的。
希望今天的文章对大家能有所帮助。