动态网页数据的采集方案

我在上一篇文章中介绍了使用ScrapySharp快速从网页中采集数据,这种方式是通过直接发送的Http请求来获取的原始页面信息,对于静态网页非常有效,但还有许多网站中的页面内容并非全部存放在原始的页面中,很多内容是通过javascript来动态生成的,这些数据用前面的方式就抓取不到了。本文这里就简单的介绍一下动态网页的采集方案。

对于这样的网页数据的采集,往往是利用一个浏览器引擎来实现整个页面的加载,输出加载完后的完整页面,然后就可以利用ScrapySharp等工具解析了。常用有如下几种方式:

?

使用WebBrowser控件

这种方式相信大多数.Net开发者都用到过,由于WebBrowser直接使用的是操作系统集成的IE,无需下载第三方控件,比较简单快捷。但它本身只是一个呈现用的控件,并没有提供多少接口,要集成一些扩展进去比较麻烦。

?

使用WebBrowser

PhantomJS是一个Webkit内核的无界面浏览器,它的一个特点是可以非常方便的集成javascript脚本,因此进行扩展开发是比较方便的,也能非常方便的在服务器端不能使用UI控件的地方使用。目前网上也大部分都是这种方案,我这里转录一下看过的几篇文章,并不做详细的介绍:

本身这个程序还是比较方便而强大的,但是在试用过程中还是存在一些问题,例如有的网页不是很规范,不能正确的解析,或者存在乱码等。

?

使用CEF控件

CEF是google提供的Chrome集成方案Chromium Embedded Framework,相对提供了更为底层的API,我们可以进行更为强大的定制(当然也需要更多的工作量),例如,不采集图片以加快内容的解析。

?

直接解析Javascript模拟渲染

以上的方案虽然都能简单正确的获取解析后的完整页面,但却存在性能问题:很慢。虽然开发浏览器的都是顶尖高手,但由于页面的渲染本身是一个非常复杂的过程,用上述工具完整渲染一个页面仍需几秒钟的时间,并且资源开销不小,无法支撑大规模的数据采集。

大多数情况下,这个并不是什么太大的问题,但如果对性能问题比较关注,有一个比较原始的方式可以解决,那就是具体分析网页的JS工作原理,模拟浏览器执行只是内容相关JS,手动获取输出的内容。

这种方式下,主要需要一个javascript引擎,目前已经有大量的js引擎提供,基本上不是什么问题。它主要的问题在于需要对网页定制分析,而这些网页的JS大多数采取了一定的混淆策略,并不容易分析,往往需要大量时间来调试它。

时间: 2025-01-15 02:12:03

动态网页数据的采集方案的相关文章

爬虫---selenium动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

第四章爬虫进阶之动态网页数据抓取

动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面.因为传统的在传输数据格式方面,使用的是XML语法.因此叫做AJAX,其实现在数据交互基本上都是使用JSON.使用AJAX加载的数据,即使使用了JS,将数

利用selenium并使用gevent爬取动态网页数据

首先要下载相应的库 gevent协程库:pip install gevent selenium模拟浏览器访问库:pip install selenium selenium库相应驱动配置  https://www.cnblogs.com/Niuxingyu/p/10490882.html #导包 import gevent #猴子补丁 from gevent import monkey monkey.patch_all() import requests import os import re f

为采集动态网页安装和测试Python Selenium库

1. 引言 上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经不能满足采集的需求了.这里我们使用selenium库,通过它我们可以很简单的使用浏览器来为我们加载动态内容,从而获取采集结果. 在很多案例中,Selenium与PhantomJS搭配采集动态网页内容(可以参看我以前发表的案例文章),直接与Firefox或者Chrome搭配,可以应对一些更加复杂的采集情形,比

Python网络爬虫技巧小总结,静态、动态网页轻松爬取数据

很多人学用python,用得最多的还是各类爬虫脚本:有写过抓代理本机验证的脚本,有写过自动收邮件的脚本,还有写过简单的验证码识别的脚本,那么我们今天就来总结下python爬虫抓站的一些实用技巧. 静态网页 对于静态网页的爬虫不用多说大家也都知道,因为爬取静态网页非常的简单,只要用requests直接把html爬取下来然后用正则表达式匹配就可以了. 动态网页 相对于静态网页的简单,但是动态网页的就会相对而而言会复杂一下,而且现在互联网的发展速度,动态网页是最多的,静态网页是比较少的,不过他有张良计

C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

转自原文C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 阅读目录 1.HtmlAgilityPack简介 2.XPath技术介绍与使用 3.采集天气网站案例 4.资源 第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel,是真尼玛的累,虽然那个时候C#还很菜,也想能不能通过程序来批量获取(所以平时想法要多才好).几

再谈C#采集,一个绕过高强度安全验证的采集方案?方案很Low,慎入

说起采集,其实我是个外行,以前拔过阿里巴巴的客户数据,在我博客的文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子) 中,介绍过采集用的工具,其实很Low的,分析Html,用开源的HtmlAgilityPack就很快解决问题了.我个人并不是技术特别深,所以只要是解决问题就OK了.但每一次需求并不是完全一致的,对上面那篇文章的采集,无需登录,是非常灵活的,但是这次碰到的稍微有点变态,虽然最后任务完成,但总结方案还是很low的,但觉得还是有必要分享出来,希望对以

动态网页爬取例子(WebCollector+selenium+phantomjs)

目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>. 这里用了WebCollector 2进行爬虫,这东东也方便,不过要支持动态关键还是要靠另外一个API -- selen

动态网页爬取样例(WebCollector+selenium+phantomjs)

目标:动态网页爬取 说明:这里的动态网页指几种可能:1)须要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成.如一个html里有<div id="test"></div>,通过JS生成<div id="test"><span>aaa</span></div>. 这里用了WebCollector 2进行爬虫,这东东也方便,只是要支持动态关键还是要靠另外一个API -- selen