原标题:R语言爬虫系列4|AJAX与动态网页介绍

作者:鲁伟,热爱数据,坚信数据技术和代码改变世界。R语言和Python的忠实拥趸,为成为一名未来的数据科学家而奋斗终生。个人公众号:数据科学家养成记 (微信ID:louwill12)

第三篇戳:R语言爬虫系列3|HTTP协议

很早之前就写过用rvest包实现对静态网页的抓取之类的文章,以至于很久之后看到那些文章的朋友还拿来套,以为换个网址也能达到同样的抓取效果。然而事与愿违,殊不知这些通常自己会“动”,明明是同一个url,前后硬是两个不同的网页内容,利用rvest的爬虫自然也就失效了。

究其缘由,还是在于有些网页的HTML/HTTP基础架构在一个页面布局中静态地显示内容,但是如果你用R函数来解析知乎首页,咱能通过这个首页实现抓取目的吗?答案当然是不能的。因为知乎首页是一个动态网站(DHTML),具体表现就是从首页不断下拉,网页内容在不断变化但url却一直都是https://www.zhihu.com/,或者是点击了某个地方内容也发生了变化但抬头一看地址栏,url依然没有变化。对这样的网页进行抓取哪能按照以前的简单套路来?明显是不可行的。

网络技术实现从静态到动态转变的一个关键角色是汇总于AJAX这个术语下的一组技术,所谓AJAX,全称叫做异步Java和XML(Asynchronous Java and XML),它是一组技术,不同的浏览器有自己的AJAX实现组件,有了AJAX技术之后,就不需要对整个网页进行刷新了,局部更新既不占用宽带又可以提高加载速度有没有,比如说刚刚的知乎首页,想看新内容?不断把网页下拉自动加载就好。

再举个例子:比如说你们班拍毕业照,照完之后洗出来才发现哎呀少了一个人,那怎么办呢?传统的方式就是重新把大家集合起来再拍一次,那AJAX就不会这么做了,AJAX会把这位漏掉的同学P到先前的合照中去。总之,AJAX可以在不重新加载整个网页的情况下对网页的局部进行更新的某种技术。

Java如何将HTML网页转化为DHTML?

Java号称最流行的Web编程脚本语言,可惜小编并不懂这门语言,但这不妨碍咱们的网络数据抓取的需要。在爬虫专栏开始的第一篇文章的时候小编就说过,HTML、CSS和Java是前端技术的三驾马车,要认识原生的Java,重要的是了解其对于HTML的三种改进方法:

1. 以HTML中的<>标签为固定位置进行代码内嵌;

2. 对<>元素中的src属性路径引用一个存放外部的Java代码文件;

3. Java代码直接出现在特定HTML元素属性里,也叫事件处理器。

在当前浏览器显示中对HTML信息进行修改称之为DOM操作(文档对象模型),这些操作构成了产生产生动态浏览器行为的基本过程,Java可供支持的修改操作有很多,HTML元素和属性可以添加移动删除,CSS样式也可以修改,具体JS是怎样对HTML进行修改的,小编这里就不展示了,感兴趣的同学可以自行去补Java这门语言,总之大家能知道是Java这个东西让我们容易抓取的静态网页变成难以抓取的动态网页的罪魁祸首之一。

XHR:DHTML中数据的获取机制是怎么样的?

如果说Java是将HTML变成DHTML的话,那么XHR就是将传统的HTTP协议同步请求通信变成异步发起HTTP请求。传统上HTTP协议的同步通信通常意味着在网络服务器处理一个新的网页过程中,用户和浏览器之间的交互是无效的。而支持在浏览器与Web服务器之间进行持续的信息交换的方法就是所谓的XHR()。

XHR在DHTML中的数据获取机制如下:

1. 用户开始通过任何浏览器可识别的事件发起一个AJAX请求,比如说点击一个按钮,下拉一个菜单之类的,然后Java会将这个把这个请求作为一个实例化的XHR对象;

2. 这个XHR对象会向服务器发起一个对特定文件的请求,请求一般从后台发出,所以不影响用户与网页的交互;

3. 请求在服务器端会被接受和处理,相应的数据就会通过XHR对象发回给浏览器客户端;

4. 数据到了客户端会被接受,该事件就会被触发然后被某个事件处理器所捕获。

在XHR的实际使用过程中,一般可以加载HTML/XML和JSON等数据类型。

使用Web开发者工具查看真实的requests地址

对于通过AJAX改进后的DHTML而言,我们在用R进行抓取时只是去查看源代码肯定是不够的,R语言没有为我们提供必要的结构分析功能,这时候还是要借助于浏览器本身的Web开发者工具来进行分析。

目前任意一款浏览器基本上都具备这个功能,只要在你浏览的网页上右键然后点击审查元素即可出现WDT(Web Development Tools)界面,界面最上面一栏显示包括元素、控制台、来源、网络、时间线、运行概况、资源、安全和审计8个面板,对于网络数据抓取而言只需要重点关注元素和网络这两大面板即可。

元素面板(Elements)包含了网页HTML结构信息,对于特定的HTML代码及其在网页视图中对应的图形化表现之间的联系特别有用,将鼠标悬停在某个元素节点上,对应的节点在HTML页面上蓝色高亮显示,而对于指定节点的信息提取,也可以通过邮件单击选择复制XPath表达式。

网络面板(Network)会提供实时的网络请求和下载的相关信息。点击网络面板然后F5刷新后下拉网页查看XHR请求可获取request信息:

从图中可以看出一共请求到6个资源,包括文件名、状态码和类型等信息。如果我们是要获取每张图片的信息的话,通过对XHR的分析多试几次即可找到我们真实要请求的url,并掌握其构成规律:

通过字符串的拼接即可构造准确的url资源请求,然后按照批量下载的方式利用RCurl包对其进行解析即可。

url规律构造如下:

http://huaban.com/boards/30912840/? j81htxp9& max=1094554994&limit=20&wfl=1

http://huaban.com/boards/30912840/?j81htxp9&&max=1094554994&limit=20&wfl=1

总之,通过AJAX构造的DHTML网站的探索方法第一步就是要准确找出我们要抓取的数据资源是来自于哪一个请求,包括一些地址和参数信息,之后我们才能考虑如何对定位到的数据进行抓取。返回搜狐,查看更多

责任编辑:

java 爬取ajax,R语言爬虫系列4|AJAX与动态网页介绍相关推荐

  1. R语言爬虫系列(1)XML抓取表格数据

    使用XML抓取表格数据 install.packages("XML") trying URL 'https://cran.rstudio.com/bin/windows/contr ...

  2. JAVA爬取虎嗅网截图_java爬虫爬取网站使用多线程(虎嗅网站)

    java爬虫爬取网站使用多线程(虎嗅网站) java爬虫爬取网站使用多线程(虎嗅网站) 图解虎嗅爬虫优化方案 pom 如下: org.apache.httpcomponents httpclient ...

  3. 爬取人民日报_【爬虫系列】人民日报半个世纪的资料(文末福利)

    在资料库中人民日报从1957年-2002年近半个世纪的报纸资料: http://www.ziliaoku.org/rmrb/ 如此好的资料,就应该自己收藏到本地,因为说不定哪一天,网上的资料就被删除了 ...

  4. 爬虫系列教程四:动态网页api分析实例之爬取dropbox上的pdf

    动态网页api分析实例:爬取dropbox上的pdf 动态网页api分析实例:爬取dropbox上的pdf 任务 分析 写代码和debug 今天老师让我下载一个网课里面的pdf材料,pdf的数目比较多 ...

  5. java爬虫系列(四)——动态网页爬虫升级版

    项目地址 项目介绍 框架 结构 快速启动 修改配置文件 WebDriverPool.java App.java ComicDriver.java ComicContentService.java co ...

  6. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  7. python爬取地表水水质监测数据(爬虫)

    文章目录 前言 一.参考博客 二.分析说明 三.查看源码 四.相关变量改动 五.代码运行 六.运行结果 七.注意 前言 第一篇博客,也是一个新手,写博客的目的也是为记录下自己的学习和解决问题的过程,同 ...

  8. java爬取网页内容 简单例子(2)——附jsoup的select用法详解

    [背景] 在上一篇博文 java爬取网页内容 简单例子(1)--使用正则表达式 里面,介绍了如何使用正则表达式去解析网页的内容,虽然该正则表达式比较通用,但繁琐,代码量多,现实中想要想出一条简单的正则 ...

  9. R语言学习系列之向量化计算

    ##R语言学习系列之向量化计算 本文主要讲解R语言向量化计算的原理及方法,希望对初学者能够提供帮助. ##一.向量化 什么是向量化计算呢?其实你可以简单的理解成这样:当我们在使用函数或者定义函数的时候 ...

  10. 手把手教你使用R语言爬虫在气象网站抓取气象数据并分析绘制热力日历图(1)

    我们做临床研究常见的烦恼为没有好的数据,目前气象网站上有很多关于气象因素和空气质量数据,但是没有系统的整理和格式等问题,我们使用起来非常不方便,而且很费时间,我们可以使用R语言爬虫工具对网站上的数据进 ...

最新文章

  1. Django--Uploaded Files以及Handlers
  2. 10.13 上午 考试
  3. Ubuntu下面apache2安装
  4. Ant 风格路径表达式
  5. [转自李战博客]悟透JavaScript
  6. (转)Ubuntu下JDK7安装全过程并调试第一个带包的java程序
  7. pytorch学习笔记(二):自动求梯度
  8. sql请求失败或服务器无即使响应,SQL2005无法启动SQL Server 请求失败或服务未及时响应等问题的解决方案...
  9. 松下plc编程线usb驱动
  10. python画图颜色种类_Python Matplotlib Boxplot颜色
  11. Oracle 创建新用户后无法登入,显示user lacks CREATE SESSION privilege; logon denied
  12. 构建系统发育树(进化树)的相关知识,以及各种进化树适用的情况。
  13. 中国银行app,H5页面调取支付,并返回状态码。
  14. 收敛域、收敛区间与收敛半径
  15. 谷歌广告投放,谷歌广告怎么投放?
  16. 烟草行业IT规划现状、实施及工作重点分析
  17. 扫雷游戏(java实现)java小程序
  18. Linux C语言 利用url下载文件(实现wget命令)
  19. 元宇宙中的数字建筑建筑企业数字化转型升级的强劲引擎
  20. 【蓝桥杯Java】大写(c ^ (1 << 5))

热门文章

  1. 服务器winsxs文件夹怎么清理工具,winsxs,详细教您winsxs文件夹清理方法
  2. 偶遇with ties
  3. [BZOJ]4453: cys就是要拿英魂!
  4. 抓取微信小程序页面丶小程序源码
  5. 程序员编程规范之注释
  6. 王菲微博“逗贫”语录暴光
  7. 阴阳师服务器维护内容,阴阳师8月1日维护内容介绍_友人帐弈鬼切内容介绍_3DM手游...
  8. 听云-服务器监控,window+tomcat配置
  9. stm32F1规避浮点运算
  10. LaTeX 旁注 边注 Marigin Note