上一篇讨论了web driver对动态网页的抓取与分析,可以很清楚的看出这是一种集中式处理方式,简单说,就是利用服务器,打开一个真正的brower,然后将需要解析的地址交给浏览器,浏览器去解析,然后将结果返回。这样正如网友评论一样,效率上不好,其实我想说的是,如果质提不上去,可以采用量的方式,比如开多线程处理,多开几台机器处理,虽然单个不快,量多后,处理速度就上去了。当然这也不是什么特别好的方法。

  先谈谈他的不好之处:

  首先,依赖浏览器的驱动,无论使用ie,firefox,chrome,都需要启动其driver,才能进行操作。

  其次,对响应结果控制力度不够自由,比如有些网页我需要一个东西,有些网页我需要另一个东西,那么我希望是,可以对响应结果进行解析和过滤。

  最后,他是一个集中式处理的方式,现在啥都讲求分布式,当然不能为了分布而分布,不过在利用brower的资源时,分布是一个好的解决方法。

  那么,我还能做什么了,今天和同事聊的时候突然想到一个方案,也许会有一些帮助。当然,目前只是一个想法,不过后续我会去试验可行性,我相信估计也有人这么试过。让我们重新回归原点,从上一篇的解决方案中可以看出,其实我们采用的基本是一种类似黑盒的测试方式,也就是说,我们根本没有分析这些动态网页的构成,只是单纯的将网页让浏览器去解析,然后我们取得结果,(当然这里先不考虑一些复杂的ajax请求)。这里有两个要素,一就是浏览器,使用的web driver;二就是浏览器去解析,并做了请求和响应。

  为什么我不能采用分布式处理呢?利用客户端的资源来解析动态网页,这样不就减轻了压力,而且可以大大增加处理地址的能力。我的想法是这样的:

  1、开发一个简单的网页,用来访问。例如一个jsp

  2、将需要进行解析的地址通过参数的形式传给这个页面。例如采用xxx.jsp?url='www.sina.com.cn'

  3、后台截获这个req,然后根据新的url也就是"http://www.sina.com.cn",发起一个新的httprequest,将这个response,write给前面这个res.

  这样其实就是将sina的respose,交给了我这个jsp。

  4、这样,我就可以做一些手脚,例如获取response的时候,采用html解析器,并利用规则过滤掉一些元素或者添加一些我们需要的脚本代码,并将这个修改后的response,交个浏览器去执行。最后获取执行后的结果,再交给服务器处理或者保存。

  这样就避免掉一开始的一些问题。首先,与浏览器driver无关,也就是说如果用ie访问,就利用ie引擎;用firefox访问,就利用firefox引擎。就可以脱离web driver。其次,可以对结果进行自由控制,采用html解析器,就可以按照自己的规则来过滤响应。最后,利用这种方式就是一种分布式的处理,也就是说凡是访问我页面的浏览器,都可以用来进行页面解析,而且可以不占用我服务器的带宽。

  可见的问题在于:

  1、如何控制客户端去访问我想要的网址。

  2、如何将访问后的内容传回后台处理。

  3、由于篡改了响应,带来的Cross Domain的问题会不会影响到我的解析结果。

  4、如何知道页面已经加载完毕。

  5、采用何种解析器解析。

  

  由于这两天公司正在搬家,暂时要缓缓,不过上面的问题我已经有了一个初步的解决办法,不过仍需验证。无论结果如何,过几天再聊。呵呵

最新文章

  1. 创建数据库指定路径sql
  2. math对象和date对象
  3. ORA-01810: 格式代码出现两次
  4. Codeforces Round #342 (Div. 2) C. K-special Tables 构造
  5. iOS推送通知流程
  6. C# .NET 逻辑层的框架设计
  7. kettle无法更新数据库字段解决办法
  8. Jupyter运行时出现下面的错误:Unexpected error while saving file: arma/Untitled.ipynb [Errno 13] Permission denied:
  9. BZOJ2564: 集合的面积(闵可夫斯基和 凸包)
  10. 【redis专题(3)】命令语法介绍之link
  11. java泛型中<?>和<T>区别
  12. SVN怎么触发Jenkins自动构建
  13. node.js中的回调
  14. [置顶] Android系统移植与调试之------->build.prop文件详细赏析
  15. mysql 中文编码问题
  16. 不可不说的Java“锁”事
  17. ADO.NET对象模型之间的关系
  18. Autofac +webapi 配置
  19. Gulp工具
  20. C基础的练习集及测试答案(提高题)

热门文章

  1. 【译】C++工程师需要掌握的10个C++11特性
  2. 有关npm rum的3个简洁技巧
  3. iOS-xib(使用XIB自定义一个UIView )
  4. 简约的单页应用引擎:sonnyJS
  5. Services学习(一)
  6. [你必须知道的.NET]第三十二回,,深入.NET 4.0之,Tuple一二
  7. jenkins配置及使用中出现的问题
  8. C#的控制台程序输出
  9. hdu 4664 Triangulation(题意已在讨论版中说明)
  10. JVM生产环境参数实例及分析