浅谈网络爬虫爬js动态加载网页(一)
由于别的项目组在做舆情的预言项目,我手头正好没有什么项目,突然心血来潮想研究一下爬虫、分析的简单原型。网上查查这方面的资料还真是多,眼睛都看花了。搜了搜对于我这种新手来说,想做一个简单的爬虫程序,所以HttpClient + jsoup是一个不错的选择。前者用来管理请求,后者用来解析页面,主要是后者的select语法很像jquery,对于用js的我来说方便太多了。
昨天和他们聊天的时候,他们选用了几个著名的开源框架使用,聊着聊着就发现原来他们目前还没有办法抓取动态的网页,尤其是几个重要的数字,例如评论数,回帖数等等。大致了解了一下,例如TRS的爬虫,对于js的调用,需要写js脚本,但是分析量巨大,他们的技术人员告诉我们,类似这样的模板他们配的话,一天也就只能配2到3个,更不要说我们这些半路出家的。正好觉得颇有挑战,所以昨天答应了他们看看能不能找到一个相对来说简单的解决办法,当然,先不考虑效率。
举一个简单的例子,如下图

“我有话说”后的1307就是后加载的,但是往往这些数字对于舆情分析来说还是比较重要的。
大致了解了需求,就分析一下如何解决。通常,我们的一次请求,得到的回应是包含js代码和html元素的,所以对于jsoup这样的html解析器在这里就难以发挥优势,因为它所能拿到的html,1307还没有生成。这个时候就需要一个可运行js的平台,将运行过js代码的后的页面,交由html解析,这样才能正确获得结果。
由于我比较偷懒,写脚本的方式一开始就被我抛弃了,因为分析一个页面太痛苦了,代码乱成一锅粥,好多还采用压缩的办法,满眼都是a(),b()的方法,看的太累了。所以我最优先想到的是,为什么我不能让这个地址在某个浏览器中运行,然后将运行的结果交给html解析器去解析,那么整个问题不就迎刃而解了吗。这样我暂时的解决方案就是在爬虫服务端,开一个后台的浏览器,或者是有浏览器内核的程序,将url地址交给它去请求,然后从浏览器中将页面的元素取出,交给html解析器去解析,从而获取自己想要的信息。
明天接着聊,先休息了。
浅谈网络爬虫爬js动态加载网页(一)的更多相关文章
- 浅谈网络爬虫爬js动态加载网页(二)
没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...
- 浅谈网络爬虫爬js动态加载网页(三)
上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将 ...
- 爬虫——爬取Ajax动态加载网页
常见的反爬机制及处理方式 1.Headers反爬虫 :Cookie.Referer.User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2.IP限制 ...
- 爬虫再探实战(四)———爬取动态加载页面——请求json
还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...
- Scrapy 框架 使用 selenium 爬取动态加载内容
使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
- JS 动态加载脚本 执行回调
JS 动态加载脚本 执行回调 关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件 ...
- js动态加载以及确定加载完成的代码
利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...
- js动态加载css文件和js文件的方法
今天研究了下js动态加载js文件和css文件的方法. 网上发现一个动态加载的方法.摘抄下来,方便自己以后使用 [code lang="html"] <html xmlns=& ...
随机推荐
- Android studio 无法启动安卓模拟器
1.通过Android SDK Manager在extra中,找到并选中了那个Intel x86 Emulator Accelerator (HAXM) 2.手动启动HAXM 去对应的sdk\e ...
- C# Color结构的各属性颜色对照表(转)
转自:http://blog.sina.com.cn/s/blog_454dc49501016q2p.html Color.AliceBlue 240,248,255 Color.LightSalmo ...
- url参数解析
http://happycoder.net/parse-querystring-using-regexp/ http://www.cnblogs.com/babycool/p/3169058.html ...
- TBB、OpenCV混合编程
TBB提供了Parallel_for.Parallel_do.Parallel_reduce等通用并行算法,可以应用在不同的并行算法场合,Parallel_for适合用在多个数据或请求之间彼此没有依赖 ...
- js 将json字符串转换为json对象
要引入:jquery-json-2.4.js 在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: JS ...
- 编码(encode)问题
1. UTF-8 与 GBK UTF-8: 允许含 BOM,但通常不含 BOM 用以解决国际上字符的一种多字节编码, 英文:8 bits(1 byte) 中文:24 bits(3 bytes) UTF ...
- js -- 捆绑
1.环境配置 主要參考网址: http://cocos2d.cocoachina.com/bbs/forum.php?mod=viewthread&tid=10226&extra=pa ...
- WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化
原文:WPF在3D Cad模型中利用TextureCoordinates实现颜色渐变显示偏差值的变化 注:最近在做3D机械模型重建方面的软件,需要根据光栅传感器采集的数据绘制3D图形,并显示出色差以及 ...
- Matlab随笔之画图函数总结
原文:Matlab随笔之画图函数总结 MATLAB函数画图 MATLAB不但擅长於矩阵相关的数值运算,也适合用在各种科学目视表示(Scientific visualization).本节将介绍MATL ...
- sqlite 初
1.SQLite是什么 基于文件的轻型数据库 无服务器 零配置 支持事务 开源 2.SQLite 怎么用 2.1 安装 SQLite官网上下载对应的DLL 与工具 配置环境变量 安装完成以后 ...