驱动管家:安全、高效、精准的专业驱动下载站!

python爬虫问题 python爬虫怎么处理动态网页?

2018-01-15 20:08:13责编:llp   来源:驱动管家     人气:

在爬虫开发中,大家可以很轻易地bypass所谓的UA限制,甚至用scrapy框架轻易实现按照深度进行爬行。但是实际上,这些并不够。关于爬虫的基础知识比如数据处理与数据存储多线程之类的。

请大家移步FB:

该系列文章都是本人所写,能力有限请多包涵。

0x01前言

在进行爬虫开发的过程中,我们会遇到很多的棘手的问题,当然对于普通的问题比如UA等修改的问题,我们并不在讨论范围,既然要将修养,自然不能说这些完全没有意思的小问题。

0x02Selenium+PhantomJS

这个东西算是老生长谈的问题吧,基本我在问身边的朋友们的时候,他们都能讲出这条解决方案:

Selenium+PhantomJS(FirefoxChrome之类的)

但是真正的有实践过的人,是不会把这个东西投入生产环境的,首先最大的问题就是Selenium+PhantomJS非常的慢,这种慢的原因就是因为他要加载这个网页所有的内容,比如图片资源,link中的CSS,JS都会加载,而且还会渲染整个网页,在渲染结束之后才会允许你操作网页的元素。当然可能会有读者问,Selenium作为可以自动化编写测试脚本的一个模块,他是自带HOOK功能的,在Selenium的API中也有介绍说Selenium可以控制等待某一个元素加载成功时返回页面数据。

没错的确是这样的,我们确实可以使用Selenium的内置api去操作浏览器完成各种各样的操作,比如模拟点击,模拟填表,甚至执行js,但是最大的问题我们还是没有解决:归根结底是操作浏览器来进行工作的,启动需要打开浏览器(等待一定时间),访问网页之后渲染,下载相应资源,执行JS,这么多的步骤,每一个步骤都需要或多或少的等待时间,这就好比,我们就是在使用浏览器做这样的事情,只不过是加上了精准的鼠标定位而已。

python爬虫问题 python爬虫怎么处理动态网页?

当然说了这么多,Selenium虽然不适合做生产解决方案,也并不是没有别的解决办法了。

0x03execjs

execjs是一个在Python中执行js的模块,听到这个,大家可能会觉得耳目一新:欸?那我是不是可以爬虫爬下来js代码然后手动控制js执行,然后就可以控制自己想要的元素,拿到想要的结果,而且也并不丢失效率。

但是我要说这样的想法,实际上是非常的naive,虽然有了这个js引擎,但是,我们需要很多很多的轮子,为什么呢?来听我一步一步解释:

1.js的强大之处其实并不在于松散的语法与容错,而是在于对BOM对象和DOM对象的操作。举个例子来说,比如,一个网页的表单,是通过操作执行js来提交的。那么,问题就在于你有办法仅仅用这个execjs来执行这段js来提交表单么?显然,这是行不通的。为什么呢?因为对于我们来说的话execjs是一个独立的模块,我们没有办法把我们静态扒下来的html文档和execjs建立联系。

2.如果非要建立联系,那么你需要自己完成js对html的DOM对象的绑定,具体怎么完成呢?js在浏览器中怎么与DOM树绑定,你就需要怎么去做。但是要怎么做啊,首先你需要一个自己构建DOM树,然后才能进行手动绑定。这个轮子,确实是非常的大。

但是如果你真的有大把的时间,那么应该怎么去做这个事情呢?没错要不你去HOOK一个webkit要不你去自己构建一个html的解析器。那么我就在这里稍微提一下这个很有趣的事情:如果构建一个HTML解析器:

python爬虫问题 python爬虫怎么处理动态网页?

最近有用PLY写过一个Lexer当时准备做个解析DOM树的HTML解析器,自己实践第一步也是觉得这个东西理论上是完全可行的,但是能不能完成就要看个人毅力和你个人的编程能力了。

0x04Ghost

关于Ghost的话,其实我个人是比较推崇的,但是其实他也并不是特别完美,它对我来说,更像是一个Selenium与PhantomJS的结合体,怎么说呢,实际上ghost这个模块用的是QT中的webkit,在安装的时候就得被迫安装pyside或者pyqt4,实际上我当时还是很难理解为什么一个这个东西没有图形界面要使用qt和pyside这种东西作为引擎呢?单独构造一个浏览器引擎真的就这么困难么?其实装好了也没什么关系,毕竟我觉得还是要比Selenium配PhantomJS好用的。

话说回来,我们就来讨论一下这个Ghost的一些问题。

首先,使用Ghost的一个好处是我们并不需要再将一个binary的浏览器放在路径下了,以至于我们不需要去花费时间打开浏览器了,因为ghost就是一个功能完全的Python实现(借助qt的webkit)的轻量级没有图形化的浏览器。

而且,ghost在初始化的时候,有一个选项可以不下载图片,但是没有办法阻止它下载js和css,其实这个也是可以原谅的,毕竟自己在使用的时候,也是需要自己去下载js在本地筛选。

于此同时ghost还是提供了相应的API这些API和selenium的API功能基本差别不是特别大,也会有处理表单,执行ajax去加载动态页面,这样来说ghost是一个完美的解决方案么?

其实还是有他自己的缺点的,就是我们还是不能完全控制每一个过程,比如我们如果只想让它解析DOM树,不动态执行js脚本,而且,我想获取他的DOM树手动进行一些操作。这些都是没有办法的。但是也并不是完全没有办法,比如国内某厂他们就做了HOOK了一个浏览器去检测XSS这个思路我们可以在以后的文章中提出,具体的操作的话,这就要看大家的编程功底了。

python爬虫问题 python爬虫怎么处理动态网页?

0x05原理总结

当然,懂得归纳的读者其实早就已经看出来了,对动态网页(通过js加载)的网页的信息采集,主要分成三种方案:

1.基于实体浏览器操作解决方案(适用于测试环境不适用于大量信息采集)。

2.基于深度控制JS脚本执行的解决方案(速度最快,编写难度最大)。

3.基于webkit的解决方案。(相对较为折衷)

本文转自:i春秋社区

原文地址:http://bbs.ichunqiu.com/thread-11098-1-1.html?from=jbzj

  • 恶意程序:开发工具blackhole是怎么勒索的?

    恶意程序:开发工具blackhole是怎么勒索的?

    随着时代的发展,当代木马恶意软件的趋势并不仅仅是通过洪水般的广告让你电脑当机或者是偷取你的银行密码,而是会将你的电脑锁住,让你不能干任何事情,除非你交了“赎金”。最近流行的“勒索软件”首次发现是在a

    详情2018-01-02 16:03:19责编:llp   来源:驱动管家     
  • 怎么使用cryptsetup加密u盘?如何在ubuntu里创建一个加密u盘?

    怎么使用cryptsetup加密u盘?如何在ubuntu里创建一个加密u盘?

    首先讲讲保护U盘的重要性笔记本和U盘被盗,是过去几年数据泄露的主要原因之一。然而比起笔记本电脑,人们通常不太重视U盘这个小玩意儿的安全。但是如果罪犯偷窃了一枚价值只有12美元的U盘,也许会让一家公司付出

    详情2018-01-04 12:22:51责编:llp   来源:驱动管家     
  • 大蜘蛛杀毒软件怎么卸载?大蜘蛛杀毒软件的卸载方法

    大蜘蛛杀毒软件怎么卸载?大蜘蛛杀毒软件的卸载方法

    Dr Web大蜘蛛反病毒2008专业版,在软件程序设计的又如何呢,我们今天来检查一下它的卸载过程。

    详情2018-01-04 10:30:53责编:llp   来源:驱动管家     
  • mysql数据库注射产生的原因 怎么利用mysql漏洞?

    mysql数据库注射产生的原因 怎么利用mysql漏洞?

    鄙人今天心血来潮突然想写篇文章,鄙人从来没写过文章,如果有错误的地方请多多指教 本文需要有基础的SQL语句知识才可以更好的理解 建议想学习的人多去了解一下SQL语句和编程语言,知己知彼才能百战百胜 我不希翼得

    详情2018-01-14 10:34:53责编:llp   来源:驱动管家     
  • 怎么保护dns服务器?dns服务器的十种保护方法

    怎么保护dns服务器?dns服务器的十种保护方法

    本文收集总结了几点保护DNS服务器的有效方法,感兴趣的小伙伴们可以参考一下。

    详情2018-01-04 17:09:39责编:llp   来源:驱动管家     
  • 黑客入侵无线网络的方法是什么?

    黑客入侵无线网络的方法是什么?

    现在无线宽频上网越来越流行,但许多无线网络并没有采取安全防护措施,不但易遭黑客入侵,而且事后追查凶手都很困难。专家提醒,黑客入侵无线网络通常采用以下四种手段:方法一:现成的开放网络过程:黑客扫瞄所有开

    详情2018-01-04 13:50:16责编:llp   来源:驱动管家     
  • 木马制作的故事 木马病毒产业链的诞生

    木马制作的故事 木马病毒产业链的诞生

    在希腊神话里,特洛伊木马背后是一个凄美的故事。可在如今的互联网世界里,木马背后隐藏着的是一条罪恶的产业链。如果不是因为上周,徐州市鼓楼区人民法院对“温柔木马”等11名犯罪嫌疑人的公开审理,这个王国里

    详情2018-01-10 19:22:38责编:llp   来源:驱动管家     
  • mysql更改密码的几种方法 mysql密码清空方法

    mysql更改密码的几种方法 mysql密码清空方法

    网上流传的几种破解mysql root密码的几种方法:方法一使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。方法二使用mysqladmin,这是前面声明的一个特例。mysqladmin -u root

    详情2018-01-15 14:43:59责编:llp   来源:驱动管家     
  • php文件包含哪些漏洞?php包含漏洞替代技术

    php文件包含哪些漏洞?php包含漏洞替代技术

    php包含漏洞替代技术================php开发者们犯得一个基本的错误是把一个不正当的变量传递给系统函数,特别是include()和require()这两个函数。这个常见的错误导致了众所周知的远程文件包含漏洞和本地文件包

    详情2018-01-11 10:16:30责编:llp   来源:驱动管家     
  • 手机炸弹是什么?手机炸弹程序是怎样的?

    手机炸弹是什么?手机炸弹程序是怎样的?

    下载一个手机炸弹软件随便输入一个手机号码然后选择次数之类的利用WSockExpert_Cn exe监听手机炸弹得出http: sms 98960 com pages user-newlogin asp?number=13088170991原来手机炸弹只不过是一个URL循环提交的

    详情2018-01-09 16:51:51责编:llp   来源:驱动管家