爬虫入门实践
大家好!随着大数据分析逐渐火热的今天,爬虫技能也成了数据分析师一项不可或缺的技能, 要做好数据分析,爬虫构造出高质量的数据集是前提。那么谈到爬虫,很多同学可能都觉得很复杂,一头雾水,不知从何学起,这里呢就教大家如何从一个简单等实践了解爬虫的基本概念,以及实现一个简单的爬虫并构造出数据集的过程。
爬虫的基本概念
爬虫,就是模拟客户端发送网络请求,接收请求响应,一种按照一定的规则,自动地抓取互联网信息的程序。
顾名思义,爬虫的技术实现需要做的就是模拟人去请求网页并得到访问结果的过程。我们可以拆解一下用户去访问浏览器的过程:
(1)第一,我们要有一个电脑机器。
在爬虫技术实现上这一点就要求有一个入网的ip地址。
(2)第二,用户要打开浏览器进行访问。
这里不得不提到一个概念就是UA(User Agent,用户代理的简写,一般用来区分不同的浏览器。)例如用户使用chrome访问了一个网页,那么chrome向对方发送请求的时候,就会带上UA信息,在对方服务接收到请求的时候,会根据UA信息识别出是哪种浏览器发出的请求,并返回适配这种浏览器解析展示的返回内容,浏览器最终拿到请求结果后,可以按照自身网页解析方式,将内容解析展示到网页上,也就是用户最终看到的结果,每种不同的浏览器都有自己的UA,例如可以很方便的查到,mac电脑chrome96.0版本的UA信息如下:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
(3)第三,要输入一串网页地址。
这个网页地址在爬虫技术中即是我们要爬取的网站的地址。
(4)用户最终能在网页上看到请求的结果网页。
在第(2)点我们提到了用户访问网页可以看到经过浏览器解析排版后的结果,而爬虫是通过程序模拟这个过程的,程序请求对方网站得到的是未经解析的html源码,因此需要根据用户需求解析出我们需要的数据字段,存储下来,得到数据集。
爬虫的技术实现
根据上述爬虫技术要素整理,可以很方便的实现出基本请求对方服务的代码,以python语言为例:
首先要引入网页请求需要的包:
import requests
然后模拟浏览器,为请求构造headers,添加UA信息:
headers = { 'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' }
爬虫还需要对方请求的地址:
url = 'http://jy.zjiet.edu.cn/job/view/id/1177411'
利用请求包中的方法,请求该地址,得到请求结果:
res = requests.get(url, headers =headers)
print res
打印出的部分请求结果如下:
我们可以看到,请求结果实际是html源码,而我们需要的数据字段是藏在了html源码中,例如我们想要得到页面上的薪水字段(图中的2500-3499):
可以找到,该字段在html源码中实际对应的是由class为text-orange salary的薪水span标签包裹着的:
因此我们可以通过一些html源码解析工具,来解析处对应的字段,例如这里小编才用了python的html源码解析包BeautifuleSoup,解出薪水字段的方法如下:
soup=BeautifulSoup(res.text,"html.parser")
salary = soup.findAll(name="span", attrs={"class" :"text-orange salary"})[0].next_element
print('薪资:%s'%(salary))
除此之外,我们还可以按照类似的方法将职位、公司、地区、工作类型、学历要求等众多信息解析出来,这也就得到了我们的一条数据:
那么问题又来了,爬虫想要构造的是一个包含众多数据的数据集,因此对于岗位信息,我们至少要爬取多个链接才能得到一个可称作数据集的数据,对此我们可以构造一个url请求池,然后循环这个请求池中的url,依次调用爬取结果,并将结果逐条保存下来,整个过程的流程图如下:
根据这个过程,最终我们得到了就业网站岗位信息的数据集:
本篇文章,我们通过一个简单的实践,教大家利用python实践爬虫的过程,并解析结果构造出数据集。那么在实际应用中的场景,有时是多变的,例如爬出来的数据可能不是那么规整,有脏数据,异常值等,对此我们需要对数据进一步对清洗和规范化,以得到高质量的有利于分析对数据。在以后的篇章中,我会一一为大家讲解实践。
下一章,我会教大家利用python可视化分析工具,将本节爬取的数据进行简单的可视化,已得到数据的一些直观展示的指标,敬请期待!
如果您对博客内容的源码感兴趣,或者希望持续获得后续关于大数据分析的系列干货知识,可微信搜索“数据分析师进阶”或扫描以下二维码关注即可,公众号私信即可获取源码信息。