爬虫案例|从攻克反爬机制到地理信息可视化!

爬虫案例|从攻克反爬机制到地理信息可视化!

上图是上海医疗服务信息便民查询系统网站(http://www.soyi.sh.cn/)上公布的医疗机构位置的热力图。

本案例先从该网站抓取全部医疗机构的坐标信息,然后用免费的BDP个人版(http://www.bdp.cn)在线做图。爬取数据时,我找到了数据的API接口,但是获取数据时发现获取失败。排查原因,发现是网站用了一种反爬虫的机制,我用伪造Cookie的方式绕开了反爬机制,顺利获取到数据。

下面开始一步步讲解。

  1. 在Chrome浏览器里输入网址 http://www.soyi.sh.cn/ 看到公告页
  2.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 点击下面的 前往搜医网 链接,然后看到的才是真正的主页
  3.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 寻找数据
  3. 点击上图分类列表里的不限链接首页就会出现数据库里所有医疗机构的信息列表。
  4.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 信息加载后,网页网址并没有发生变化,所以怀疑网页用了异步加载的技术。接下来用快捷键 Ctrl + Shift + I 打开Chrome的开发者工具,切换到Network标签栏。重现刚才点击页面的操作,也就是再点击不限链接页面就重新加载了。
  3.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1. 进群:548377875 即可获取数十套PDF哦!
  2. 然后发现,多出了6个请求,第一个是个XHR类型的请求,这就是异步加载的意思,后5个是图片,不是我们关心的。选中第一个请求,看看Preview,发现页面上展示的信息,就在里面,是个JSON格式的数据
  3.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 所以第一个请求就是我们要找的数据接口。再看Header信息
  3.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. Request URL是 http://www.soyi.sh.cn/h/show?page=1&type=2&qx=&traps=&category=&category_s3_ul=&level=&tech=&calve=&quick=&stype=&length=10
  3. 页面显示,总共有505页的数据,我们看到的是第一页,上面URL里,我把page=1用红色标出来了,能猜出来什么意思吧。
  4. Request Method表示的是请求方法在这里是GET方法,这决定了我们在用Python写爬虫时用什么函数获取数据。
  5.  
  6. 第一次尝试获取数据
  7. 用requests库里的get函数获取接口的数据
  8.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 发现抓取下来的并不是JSON格式的数据,查看下结果,发现是我们最初访问的公告页的代码
  3.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2.  
  3. 反爬虫机制的分析
  4. 尝试给上面代码里的URL赋予该网站其他页面链接的网址,结果都出现公告页的HTML代码
  5. 我猜想该网址是不是用了这样的反爬虫机制:如果用户第一次访问该网站,就会自动跳转到公告页,如果已经访问过该网站,就会获得想查看的资源。而网站判断用户有没有访问过,依据是session和cookie,前者是在服务器端控制,后者在浏览器端留下痕迹。
  6. 怎么验证我的猜想呢,我现在再次访问网址http://www.soyi.sh.cn/ ,发现直接看到了网站主页,而不是公告页。请回过头看看第一步里公告页的网址
  7.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 发现并其网址并不是http://www.soyi.sh.cn/,而是http://www.soyi.sh.cn/op,说明在我第一次访问网站时,发生了页面跳转,而再次访问网站时,不会跳转
  3. 然后我再换个浏览器,访问http://www.soyi.sh.cn/,发现果然转到公告页了,因为此时是用新的浏览器第一次访问该网站
  4. 以上证明我的猜想是正确的。那要怎么攻克这道防线呢?
  5.  
  6. 伪造Cookie
  7. 为什么这种反爬的手段有用呢?因为人登录网站,只要访问过,就会在浏览器留下Cookie,证明已经访问过了。但是如果用Python代码来获页面,就留不下Cookie。
  8. 我这里用的突破手段就是用Chrome的开发者工具,拿到浏览器里的Cookie,强行加在Python爬虫代码里,让服务器识别不出这是个爬虫程序。与其说是伪造,不如说是借用Cookie。
  9. 还是回到寻找数据源的那步,查看Header信息里的Request Headers,找到Cookie那段,把Cookie信息复制出来。
  10.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. Python爬虫程序
  3.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 可以看到,跟之前的代码相比,我再调用request.get函数时,增加了headers参数,在headers参数里,把Cookie和浏览器型号等信息加进去了,目标网站的服务器接收到这些信息就会以为我的程序是浏览器,并且已经访问过他们网站,于是给我发送了医疗机构的数据,也就是后面的res变量。利用json模块解析后,得到的res变量是个字典构成的列表,列表里每个元素都是字典,代表一个医疗机构。
  3. 数据整理
  4.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 上面得到的变量res可以直接转化为数据框,代码如上。
  3. 获取全部数据并整理
  4. 上面获取的res变量只是全面医疗机构的一部分,总共505页数据,我们只拿到了第一页,不过这已经跨过了一大步。
  5.  

爬虫案例|从攻克反爬机制到地理信息可视化!

  1.  
  2. 我们第一页的数据会获取了,其他504的数据,只要做个循环就行了。在每一步循环里,都把抓下来的数据写到csv文件里,并且是附加的方式来写文件,而不是清除前一步文件里的内容
  3.  
  4. 可视化

这步比较简单,在BDP个人版(http://me.bdp.cn)网站上注册个账号。

上传好数据。

再创建仪表盘。

爬虫案例|从攻克反爬机制到地理信息可视化!

然后添加图表,选经纬度地图,选择之前上传的数据soyi。

爬虫案例|从攻克反爬机制到地理信息可视化!

设置好经纬度对应的变量名称

爬虫案例|从攻克反爬机制到地理信息可视化!

剩下的工作就是托托拽拽了,看看帮助文档的动画就会做了。

  • BDP帮助中心 https://book.bdp.cn/
  • 视频教程 https://me.bdp.cn/instructional_video.html

爬虫案例|从攻克反爬机制到地理信息可视化!

加群:960410445    领取数十套PDF哦!

看完本文是不是觉得爬虫其实很简单呢?

如果你想进一步学习更多案例,或者现在手头有网站数据项爬取,不如来参加我们的网络爬虫和文本分析实战案例研讨会。我们的原则是,能少学代码就少教代码,能不写代码就教你不写代码完成任务。

我们的课程专门为人文财经类专业的学员设计,除了R和Python,还会教knime软件,让你轻松点击几下鼠标就能完成文本分析。

爬虫案例|从攻克反爬机制到地理信息可视化!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实