由于别的项目组在做舆情的预言项目,我手头正好没有什么项目,突然心血来潮想研究一下爬虫、分析的简单原型。网上查查这方面的资料还真是多,眼睛都看花了。搜了搜对于我这种新手来说,想做一个简单的爬虫程序,所以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动态加载网页(一)的更多相关文章

  1. 浅谈网络爬虫爬js动态加载网页(二)

    没错,最后我还是使用了Selenium,去实现上一篇我所说的问题,别的没有试,只试了一下firefox的引擎,总体效果对我来说还是可以接受的. 继续昨天的话题,既然要实现上篇所说的问题,那么就需要一个 ...

  2. 浅谈网络爬虫爬js动态加载网页(三)

    上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将 ...

  3. 爬虫——爬取Ajax动态加载网页

    常见的反爬机制及处理方式 1.Headers反爬虫 :Cookie.Referer.User-Agent 解决方案: 通过F12获取headers,传给requests.get()方法 2.IP限制 ...

  4. 爬虫再探实战(四)———爬取动态加载页面——请求json

    还是上次的那个网站,就是它.现在尝试用另一种办法——直接请求json文件,来获取要抓取的信息. 第一步,检查元素,看图如下: 过滤出JS文件,并找出包含要抓取信息的js文件,之后就是构造request ...

  5. Scrapy 框架 使用 selenium 爬取动态加载内容

    使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...

  6. Python+Selenium爬取动态加载页面(1)

    注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...

  7. JS 动态加载脚本 执行回调

    JS 动态加载脚本  执行回调 关于在javascript里面加载其它的js文件的问题可能很多人都遇到过,但很多朋友可能并不知道怎么判断我们要加载的js文件是否加载完成,如果没有加载完成我们就调用文件 ...

  8. js动态加载以及确定加载完成的代码

    利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...

  9. js动态加载css文件和js文件的方法

    今天研究了下js动态加载js文件和css文件的方法. 网上发现一个动态加载的方法.摘抄下来,方便自己以后使用 [code lang="html"] <html xmlns=& ...

随机推荐

  1. 【a603】加工生产调度

    Time Limit: 1 second Memory Limit: 32 MB [问题描述] 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加 ...

  2. 支付(异步通知notify_url 与 同步通知return_url的区别)

    同步通知和异步通知发送的数据没有本质的区别:同步通知有2个作用:第一是从支付宝的页面上返回自己的网站继续后续操作:第二是携带支付状态的get参数:让自己的网站用于验证: 同步通知后:还需要异步通知主要 ...

  3. Android中去掉标题的方法总结

    方法一:也一般入门的时候经常使用的一种方法在setContentView()方法的前面插入代码: requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标 ...

  4. 各个版本 Windows 10 系统中自带的 .NET Framework 版本

    原文各个版本 Windows 10 系统中自带的 .NET Framework 版本 Windows 名称 Windows 版本 自带的 .NET Framework 版本 Windows 10 Oc ...

  5. 一个简单的C++性能测试工具(ms级别)

    如何使用 #include "sperformance.h" #include <iostream> #include <boost/thread.hpp> ...

  6. AntDesign Form表单字段校验的三种方式

    1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator中的rules验证.rules中定义校验规则,message为校验不通过时的提示文字. ...

  7. python解决urllib2乱码问题

    示例: #!/usr/bin/env python # -*- coding: utf-8 -*- import urllib import urllib2 def main(): url = &qu ...

  8. 从Windows系统服务获取活动用户的注册表信息(当前活动用户的sessionId. 当前活动用户的 hUserToken)

    首先,对“活动用户”的定义是,当前拥有桌面的用户.对于Windows XP及其以后的系统,即使是可以多个用户同时登录了,拥有桌面的也仅仅只有一个. 如果系统级服务调用Windows API来获取注册表 ...

  9. WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化)

    原文:WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化) 注释直接写在代码里了   不太理解意思的 可以先去看看我上一篇  WPF ScrollViewer(滚动条)  自定 ...

  10. Gradle编译失败 generating the main dex list

    编译打包的时候出现这个错误,信息很少. * What went wrong: Execution failed for task ':camCard_Asia_Trunk:transformClass ...