首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小科普:数据爬虫究竟是在干啥

小科普:数据爬虫究竟是在干啥

作者头像
TTTEED
发布2021-02-01 15:05:24
7130
发布2021-02-01 15:05:24
举报

今天有个小目标:用一个网站实例来做展示,给大家科普下数据爬虫工作的过程。不知道最终效果如何,如果你能看到最后,不妨评论下你的感受。

了解任务

首先,选定的网站是 爱尔眼科官网 https://www.aierchina.com/

通常,医院官网比较有价值的数据是它在全国各城市的医院门店信息,比如我选择主页上的【找医院】-【山东省】-【东营】,便会进入东营市医院信息页面:

选择后省份、城市后,浏览器会跳转到:

https://www.aierchina.com/hospital/shandong/dongying.html

该页面上所有医院的地址、项目、时间等信息数据,便是我们想要获取的有价值信息。

到这里,我们的任务目标就比较明确了:将爱尔眼科官网上所有省份城市的医院数据全部下载下来。

设计方法

如果完全不懂代码编程,那么完成上面的任务,就是手动一个个选择各个城市、进入所有城市医院信息的页面,然后将每家医院的信息复制、粘贴到表格中。

爱尔眼科网站展示的医院数目约 450 多条,顺利的话,手动能几天内搞定。

那么如果想用代码来自动化实现上面的过程,要怎么操作呢?

首先你要知道,网站页面上展示的所有信息,其实是在你输入网址、敲下回车之后,浏览器发出了请求、接收到返回信息、再展示给你的

那么代码编程,就可以不用再去打开浏览器、输入网址敲回车,而是直接通过代码来直接发送请求。

原本是浏览器接收到返回信息,再展现给我们;代码编程就可以拿到返回的信息,直接对这些信息处理、提取关键数据。

回归到爱尔眼科官网,我们首先需要获取到每个城市页面对应的网址,然后在城市页面上提取展示的医院信息

城市网址

刚有说代码会直接发送请求来获取网站返回的信息,怎么理解呢?可以在任意网站上【点击鼠标右键】-【查看网页源代码】,这里展示的与网站返回信息比较接近了。

比如,爱尔眼科官网首页-查看网页源代码,向下拉到大概 600 多行:

基本每个城市对应一个网址,看着特别像所有城市的网址。暂且先把它当成我们第一步要用代码提取的信息,OK,我们现在已经拿到了所有城市对应的城市页面网址了。

医院数据

拿到了城市页面的网址,我们也可以通过【网页源代码】查找其中医院信息:

用代码将其中所有医院数据提取出来,我们便完成了对一个城市所有医院信息的抓取数据工作。

既然一个城市的抓数流程走通了,便可以对之前提取到的所有城市网址链接都进行同样的流程,从而获取到所有城市的医院数据了。

代码编程

梳理出上面的思路,最重要的便是写代码来实现整个过程了。这里我不展开具体代码逻辑,之前我自学 Python 时觉得用 Python 写爬虫比较轻松,工作里接触到 NodeJS 爬虫,对比着会觉得其它编程语言来写爬虫也没有那么麻烦。

所以只要合适、自己能上手,选择什么编程语言其实没那么重要,只不过换了种语法来把我们设计的流程实现罢了。

改 Bug

如果身边有程序员朋友,可能会经常听到他们说【改 Bug】,那究竟啥是【改 Bug】呢?

Bug,漏洞,也就是代码中错误的地方。

而我,恰好在爱尔眼科官网首页上,就发现了不少问题,也就是刚提到的不少 Bug

如果你有在爱尔眼科上班的朋友,可以顺手把这些问题转给他看了。

刚我们在首页的【网页源代码】中找到了各个城市对应的网址链接,其实这里面的上百条链接中,有13条拼写错误:

看代码可能比较头大,可以在手机端访问 https://www.aierchina.com/ 打开爱尔眼科官网,点击右上角的选择定位按钮,选到首字母 B 的蚌埠(或者首字母 C 的池州,总共有 13 个城市会报错)

共有13个城市的链接有问题,原因部分是拼写错误、部分是省份和城市拼接错误,比如原本山东临沂错拼成 shanxi/linyi,再比如陕西西安拼成 shanxixi/xian,还挺潮的,陕西西。

这些由于程序员写代码时造成的错误,就是常说的 Bug 漏洞的一些例子,而改 Bug 就是将这些错误改正,使得用户使用时页面可以正常跳转。

抓数优化

刚我们梳理了整个抓取数据的过程,定位到错误的城市网址并进行改正,理论上应该能拿到所有城市医院数据了。

但是,官网首页代码中的城市链接是不全的,直接体现就是手机端访问爱尔眼科官网,城市列表比电脑端可选的要少。

既然有遗漏,那么我们就没有把城市抓全,自然就要去检查缺了哪些然后去补上。

我第一遍抓取这网站的时候,就是遇到了这个坑。

细心的话,你应该也发现了,电脑端展示省份和城市的方式,和手机端展示城市的列表方式,是有些差别的

是的,换句话说,刚我们遇到的问题、Bug,来自于移动端所依赖的城市网址们。

想要完全解决这个问题,我们需要从电脑端选择省份、城市的方式上去找思路。

最终,我也是在网站返回的数据中,找到了相关省份城市的数据,它没有直接展现在页面上,而是藏在了 JS 代码中,从而拿到了完整的城市网址数据。

拿到完整的城市网址数据,便解决了遗漏城市的问题,我们的抓取所有城市医院数据的任务才算圆满完成。

最终把得到的数据写到 Excel 表格中,大致样子如下:

总结

看到这,如果对编程不感兴趣,我猜你已经觉得麻烦了吧。

在上面的抓取数据过程中,我们用代码编写的程序,像是一个个蜘蛛(爬虫),在网络上去获取我们想要的数据——也因此,抓取数据又被称为爬虫、爬取数据

但上面描述的过程,全部都没有提及编写代码来实现这个过程,其实这个才是程序员实际的劳动,其中也会有各种细节要处理,去发现并解决各种 Bug。

看到这,应该能理解为什么高级程序员都是绝顶聪明了吧。

而上面描述的这个抓取数据的任务,只能算初级难度的爬虫任务,因为在整个过程中,网站并没有对我们做限制、我们提取数据的过程也没有太多障碍。

一旦网站对我们访问做些限制,比如验证码;或者将数据进行处理,比如设置编码格式或加密,那么我们就需要将这些困难一个个克服来获取最终的结果。

以上,便是一个完整抓取爱尔眼科网站上医院数据的流程了,感受如何?

如果有朋友还不知道爬虫、程序员每天都在干啥,也可以给他科普科普了~

最后,可能有人疑问:我闲着没事,去下载这些医院数据干嘛?

医院数据的价值可能不好直接体现,不妨把它换成一个个用户数据……

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-01-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TTTEED 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
验证码
腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档