在爬虫开发中,大家可以很轻易地 bypass 所谓的 UA 限制,甚至用 scrapy 框架轻易实现按照深度进行爬行。但是实际上,这些并不够。关于爬虫的基础知识比如数据处理与数据存储多线程之类的。
请大家移步 FB:
该系列文章都是本人所写,能力有限请多包涵。
0x01 前言
在进行爬虫开发的过程中,我们会遇到很多的棘手的问题,当然对于普通的问题比如 UA 等修改的问题,我们并不在讨论范围,既然要将修养,自然不能说这些完全没有意思的小问题。
0x02 Selenium + Phantom ***
这个东西算是老生长谈的问题吧,基本我在问身边的朋友们的时候,他们都能讲出这条解决方案:
Selenium + Phantom *** (Firefox Chrome之类的)
但是真正的有实践过的人,是不会把这个东西投入生产环境的,首先更大的问题就是Selenium + Phantom *** 非常的慢,这种慢的原因就是因为他要加载这个网页所有的内容,比如图片资源,link 中的 CSS, *** 都会加载,而且还会渲染整个网页,在渲染结束之后才会允许你操作网页的元素。当然可能会有读者问,Selenium 作为可以自动化编写测试脚本的一个模块,他是自带 HOOK 功能的,在 Selenium 的 API 中也有介绍说 Selenium 可以控制等待某一个元素加载成功时返回页面数据。
没错的确是这样的,我们确实可以使用 Selenium 的内置 api 去操作浏览器完成各种各样的操作,比如模拟点击,模拟填表,甚至执行 js,但是更大的问题我们还是没有解决:归根结底是操作浏览器来进行工作的,启动需要打开浏览器(等待一定时间),访问网页之后渲染,下载相应资源,执行 *** ,这么多的步骤,每一个步骤都需要或多或少的等待时间,这就好比,我们就是在使用浏览器做这样的事情,只不过是加上了精准的鼠标定位而已。
当然说了这么多,Selenium 虽然不适合做生产解决方案,也并不是没有别的解决办法了。
0x03 execjs
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 解析器:
格式范文: 1、如何做活动方案及如何实施活动: 首先做活动策划的你需要将此次活动项目的来龙去脉作一个清晰的交待,同时充分陈述项目的意义、作用和效果,只有得到认可后才能实施。 2、写明活动的具...
倾斜的入口和屋顶与这个楔形房屋的植物覆盖的屋顶相交,由比利时马尔代姆村的建筑师办公室OYO完成(+幻灯片)。位于根特的OYO-之前的项目包括整体混凝土房屋的扩建 -对该新物业进行了公开介绍,因此决定专...
腾讯科技讯(贝克汉姆)中国北京时间7月15日信息,据海外新闻媒体,微软公司Windows Phone单位首席总裁安迪·张仪(Andy Lees )在这周的微软公司全世界小伙伴交流会上表明,微软公司...
微信聊天记录删除了还能恢复吗?微信聊天记录对经常使用的用户来说,是非常重要的。里面记录了很多重要凭证,一旦不小心删除了想必会带来很大的麻烦,那么删除的微信记录还能恢复吗?其实删除不用担心,只要找对了方...
上篇文章发出来后获得了很多业内好伴侣的支持,也表达了一些沟通或差异的概念,甚至帮我找到了一些理论支撑,出格感激。这次我规划在上次的基本上做进一步的延伸,从理论模子到更具象的实际环境。 为了保持各人在...
为贯彻全国教育大会精神,落实《国家中长期教育改革和发展规划纲要(2010-2020年)》和教育部关于自主招生改革的指导意见,选拔学科特长突出和具有创新潜质的优秀高中毕业生进入我校就读,2019年我校继...