- 浏览: 564818 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
1.缘起
随着移动互联网的发展,现在写web和我三年前刚开始写爬虫的时候已经改变了太多。特别是在node以及javascript/ruby社区的努力下,以往“服务器端”做的事情都慢慢搬到了“浏览器”来实现,最极端的例子可能是meteor了 ,写web程序无需划分前端后端的时代已经到来了。。。
在这一方面,Google一向是最激进的。纵观Google目前的产品线,社交的Google Plus,网站分析的Google Analytics,Google目前赖以生存的Google Adwords等,如果想下载源码,用ElementTree来解析网页,那什么都得不到,因为Google的数据都是通过Ajax调用经过数据混淆处理的数据,然后用JavaScript进行解析渲染到页面上的。
本来这种事情也不算太多,忍一忍就行了,不过最近因业务需要,经常需要上Google的Keyword Tools来分析特定关键字的搜索量
图为关键字搜索的截图
图为Google经过混淆处理的Ajax返回结果。
要把这么费劲的事情自动化倒也不难,因为Google也提供了API来做,Adwords项目的TargetingIdeaService就是来做这个的,问题是Google的API调用需要花钱,而如果能用爬虫技术来爬取这个结果,就能省去不必要的额外开销。
2. Selenium WebDriver
由于要解析执行复杂的JavaScript,必须有一个Full Stack的浏览器JavaScript环境,这种环境三年前的话,可能只能诉诸于于selenium,selenium是一款多语言的浏览器Driver,它最大的优点在于,提供了从命令行统一操控多种不同浏览器的方法,这极大地方便了web产品的兼容性自动化测试。
2.1 在没有图形界面的服务器上安装和使用Selenium
安装selenium非常简单,pip install selenium 即可,但是要让firefox/chrome工作,没有图形界面的话,还是要费一番功夫的。
推荐的做法是
Selenium的安装和配置在此就不多说了,值得注意的是,如果是Ubuntu用户,并且要使用Chrome的话,必须额外下载一个chromedriver,并且把安装的chromium-browser链接到/usr/bin/google-chrome,否则将无法运行。
2.2 爬取Keywords
先总结一下Adwords的使用方法吧,要能正常使用Adwords,必须要有一个开通Adwords的Google Account,这倒不是很难,只要访问 http://adwords.google.com ,Google会协助创建账号,如果还没有的话,其次就是登陆了。
通过分析登陆页面,我们可以看到需要在id为Email的一个input框内输入email,然后在id为Passwd的密码框内输入密码,然后点击Sign in提交这个页面内唯一的form。
首先别忘了开一个浏览器先
登陆后,我们发现需要访问一个类似 https://adwords.google.com/o/Targeting/Explorer 的网页才能跳转到关键字工具,于是我们手动生成一下这个网页
到了工具主页以后,事情就变得Tricky起来了。因为整个关键字工具都是个客户端App,在全部文件载入完成以后,页面不会直接渲染完毕,而是要经过复杂的JavaScript运算后页面才会完整显示。然而Selenium WebDriver并不知道这一点,所以我们要让他知道。
在这里,我们要等待Search按钮在浏览器中出现以后,才能确认网页加载完毕,Selenium WebDriver有两种方式可以实现这一点,我偷懒用了全局的默认等待机制:
于是Selenium就会在找不到页面元素的时候自动等候不超过30秒
接下来,等待输入框和Search按钮出现后提交搜索iphone关键字的请求
然后我们继续等待class为sLNB的table的出现,并解析结果
这里我们使用了xpath来提取网页特征,这也算是写爬虫的必备吧。
完整的例子见: https://gist.github.com/3798896 替换email和passwd后直接就能用了
3. JavaScript Headless解决方案
随着Node以及随之而来的JavaScript社区的进化,如今的我们就幸福多了。远的我们有phantomjs, 一个Headless的WebKit Driver,意味着可以无需GUI,完全模拟Chrome/Safari的操作。 近的有casperjs(基于phantomjs的好用封装),zombie(相比phantomjs的优势是可以和node集成)等。
其中非常可惜地是,zombiejs似乎对富JavaScript网站支持得有问题,所以后来我还是只能用casperjs来进行测试。Headless的方案因为不需要渲染GUI,执行速度约为Selenium方案的三倍。
另外由于这是纯JavaScript的方案,于是我们可以直接在例如Chrome的Console模式下写代码控制浏览器,不存在如Selenium那样还需要语义转换,非常简洁直观。例如利用W3C Selectors API Level 1所提供的querySelector来快速选取元素,对表单进行submit,对按钮进行click,甚至可以执行自定义JavaScript脚本以便按一定规律对页面进行操控。
但是casperjs或者说phantomjs的弱点是不支持除了文件读写和浏览器操作以外的一切*nix IPC惯用伎俩,socket神马的统统不支持,1.4版本以后才加入了一个webserver用于和外界通信,但是用httpserver来和外界通信?我有点抵触就是了。
废话不说了,casperjs的代码看起来就是这样,登陆:
与Selenium类似,因为页面都是Ajax调用的,我们需要明确地“等待某个元素出现”,即:waitForSelector,casperjs的文档既简洁又漂亮,不妨多逛逛。
值得一提的是,casperjs一定要调用casper.run方法,之前的start, then等方法,只是把步骤封装到了this._steps里面,只有在run的时候才会真正执行,所以casperjs设计流程的时候会很痛苦,for/each之类的手法有时并不好用。
这个时候需要用JavaScript编程比较常用的递归化的方法,参见https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js 这个例子。我在完整的casperjs代码里面也是这么做的。
具体逻辑的实现和selenium类似,我就不废话了,完整的例子参见: https://gist.github.com/3798922
4. 综上
介绍了selenium和casperjs两种不同的终极爬虫写法,但是其实这篇文写来只是太久没更新了,写点东西更新一下而已:)
随着移动互联网的发展,现在写web和我三年前刚开始写爬虫的时候已经改变了太多。特别是在node以及javascript/ruby社区的努力下,以往“服务器端”做的事情都慢慢搬到了“浏览器”来实现,最极端的例子可能是meteor了 ,写web程序无需划分前端后端的时代已经到来了。。。
在这一方面,Google一向是最激进的。纵观Google目前的产品线,社交的Google Plus,网站分析的Google Analytics,Google目前赖以生存的Google Adwords等,如果想下载源码,用ElementTree来解析网页,那什么都得不到,因为Google的数据都是通过Ajax调用经过数据混淆处理的数据,然后用JavaScript进行解析渲染到页面上的。
本来这种事情也不算太多,忍一忍就行了,不过最近因业务需要,经常需要上Google的Keyword Tools来分析特定关键字的搜索量
图为关键字搜索的截图
图为Google经过混淆处理的Ajax返回结果。
要把这么费劲的事情自动化倒也不难,因为Google也提供了API来做,Adwords项目的TargetingIdeaService就是来做这个的,问题是Google的API调用需要花钱,而如果能用爬虫技术来爬取这个结果,就能省去不必要的额外开销。
2. Selenium WebDriver
由于要解析执行复杂的JavaScript,必须有一个Full Stack的浏览器JavaScript环境,这种环境三年前的话,可能只能诉诸于于selenium,selenium是一款多语言的浏览器Driver,它最大的优点在于,提供了从命令行统一操控多种不同浏览器的方法,这极大地方便了web产品的兼容性自动化测试。
2.1 在没有图形界面的服务器上安装和使用Selenium
安装selenium非常简单,pip install selenium 即可,但是要让firefox/chrome工作,没有图形界面的话,还是要费一番功夫的。
推荐的做法是
Selenium的安装和配置在此就不多说了,值得注意的是,如果是Ubuntu用户,并且要使用Chrome的话,必须额外下载一个chromedriver,并且把安装的chromium-browser链接到/usr/bin/google-chrome,否则将无法运行。
2.2 爬取Keywords
先总结一下Adwords的使用方法吧,要能正常使用Adwords,必须要有一个开通Adwords的Google Account,这倒不是很难,只要访问 http://adwords.google.com ,Google会协助创建账号,如果还没有的话,其次就是登陆了。
通过分析登陆页面,我们可以看到需要在id为Email的一个input框内输入email,然后在id为Passwd的密码框内输入密码,然后点击Sign in提交这个页面内唯一的form。
首先别忘了开一个浏览器先
登陆后,我们发现需要访问一个类似 https://adwords.google.com/o/Targeting/Explorer 的网页才能跳转到关键字工具,于是我们手动生成一下这个网页
到了工具主页以后,事情就变得Tricky起来了。因为整个关键字工具都是个客户端App,在全部文件载入完成以后,页面不会直接渲染完毕,而是要经过复杂的JavaScript运算后页面才会完整显示。然而Selenium WebDriver并不知道这一点,所以我们要让他知道。
在这里,我们要等待Search按钮在浏览器中出现以后,才能确认网页加载完毕,Selenium WebDriver有两种方式可以实现这一点,我偷懒用了全局的默认等待机制:
于是Selenium就会在找不到页面元素的时候自动等候不超过30秒
接下来,等待输入框和Search按钮出现后提交搜索iphone关键字的请求
然后我们继续等待class为sLNB的table的出现,并解析结果
这里我们使用了xpath来提取网页特征,这也算是写爬虫的必备吧。
完整的例子见: https://gist.github.com/3798896 替换email和passwd后直接就能用了
3. JavaScript Headless解决方案
随着Node以及随之而来的JavaScript社区的进化,如今的我们就幸福多了。远的我们有phantomjs, 一个Headless的WebKit Driver,意味着可以无需GUI,完全模拟Chrome/Safari的操作。 近的有casperjs(基于phantomjs的好用封装),zombie(相比phantomjs的优势是可以和node集成)等。
其中非常可惜地是,zombiejs似乎对富JavaScript网站支持得有问题,所以后来我还是只能用casperjs来进行测试。Headless的方案因为不需要渲染GUI,执行速度约为Selenium方案的三倍。
另外由于这是纯JavaScript的方案,于是我们可以直接在例如Chrome的Console模式下写代码控制浏览器,不存在如Selenium那样还需要语义转换,非常简洁直观。例如利用W3C Selectors API Level 1所提供的querySelector来快速选取元素,对表单进行submit,对按钮进行click,甚至可以执行自定义JavaScript脚本以便按一定规律对页面进行操控。
但是casperjs或者说phantomjs的弱点是不支持除了文件读写和浏览器操作以外的一切*nix IPC惯用伎俩,socket神马的统统不支持,1.4版本以后才加入了一个webserver用于和外界通信,但是用httpserver来和外界通信?我有点抵触就是了。
废话不说了,casperjs的代码看起来就是这样,登陆:
与Selenium类似,因为页面都是Ajax调用的,我们需要明确地“等待某个元素出现”,即:waitForSelector,casperjs的文档既简洁又漂亮,不妨多逛逛。
值得一提的是,casperjs一定要调用casper.run方法,之前的start, then等方法,只是把步骤封装到了this._steps里面,只有在run的时候才会真正执行,所以casperjs设计流程的时候会很痛苦,for/each之类的手法有时并不好用。
这个时候需要用JavaScript编程比较常用的递归化的方法,参见https://github.com/n1k0/casperjs/blob/master/samples/dynamic.js 这个例子。我在完整的casperjs代码里面也是这么做的。
具体逻辑的实现和selenium类似,我就不废话了,完整的例子参见: https://gist.github.com/3798922
4. 综上
介绍了selenium和casperjs两种不同的终极爬虫写法,但是其实这篇文写来只是太久没更新了,写点东西更新一下而已:)
发表评论
-
40个有创意的jQuery图片和内容滑动及弹出插件收藏集之三
2014-12-09 10:33 786原文地址:http://www.techo ... -
241个jquery插件—jquery插件大全
2014-12-09 10:26 802原文地址:http://blog.csdn.net/adsda ... -
前端ui的js框架
2014-09-04 16:45 593原文地址:http://www.quickui.net/v3/ ... -
2014 年最火的21个JavaScript框架
2014-09-03 17:25 477原文地址:http://www.iteye.com/news/ ... -
Bootstrap 栅格系统
2014-08-08 15:53 517原文地址:http://www.cnblogs.com/lin ... -
自定义Bootstrap
2014-08-08 10:14 685原文地址:http://www.w3cplus.com/css ... -
使用Selenium和PhantomJS解析带JS的网页
2014-08-06 17:57 1048有的网页,不能直接通过wget/curl等命令、或者直接使用P ... -
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
2014-08-06 17:56 621原文地址:http://blog.chin ... -
ubuntu12.04 下安装nodejs【整理】
2014-06-12 14:38 731ubuntu12.04 下安装nodejs【整理】 作者:杭州 ... -
Ubuntu安装nodeJS
2014-06-12 14:38 512Ubuntu安装nodeJS 安装环境 ubuntu12. ... -
纯js页面跳转整理
2014-05-20 18:06 526纯js页面跳转整理 js页面跳转 js方式的页面跳转 1. ... -
细说Cookie
2013-09-29 15:14 648细说Cookie 阅读目录 开始 ... -
JavaScript Source Map 详解
2013-08-30 09:49 808JavaScript Source Map 详解 ... -
9 个超实用的 jQuery 代码片段
2013-07-15 14:49 761jQuery以其强大的功能和简单的使用成为了前端开发者最喜欢 ... -
前端工具导航
2013-07-11 14:36 1004http://f2e.im/static/pages/nav ... -
主题:50个令人惊奇的jQuery插件
2013-05-29 18:17 988jQuery拥有强大的有创造性的程序员群体。 然而,它很难通 ... -
jquery触发事件
2013-05-23 17:25 610Snandy Stop, thinking is th ... -
jquery事件命名空间
2013-05-23 17:13 517JQUERY事件命名空间 2012 ... -
jQuery的事件命名空间-Namespaced Events
2013-05-23 17:12 632jQuery的事件命名空间-Namespaced Event ... -
JQuery自定义事件的应用 JQuery最佳实践
2013-05-23 16:54 799本文主要介绍JQuery框架里面支持的自定义事件模型,通过实 ...
相关推荐
docker run -v `pwd`/casperjs-files:/home/casperjs-files fprieur/docker-casperjs casperjs /home/casperjs-files/sample.js 截屏 docker run -v `pwd`/casperjs-files:/home/casperjs-files fprieur/docker-...
docker run -v * pwd * /casperjs-test:/home/casperjs-test hantq/docker-casperjs casperjs /home/casperjs-test/sample.js 截屏 docker run -v * pwd * /casperjs-test:/home/casperjs-test hantq/docker-...
总的来说,"casperjs-1.1.4-1.zip"是一个用于浏览器自动化和功能测试的工具包,其1.1.4-1版本为开发者提供了稳定且功能丰富的环境,可以帮助他们高效地编写和执行测试脚本,确保网页应用的正常运行和高质量。...
- casperjs --ssl-protocol=any index.js <url> 或使用以下本地安装的 casperjs 运行它 - ./node_modules/.bin/casperjs --ssl-protocol=any index.js <url> 可以将附加选项--max-depth传递给命令以设置要抓取的页面...
长期以来,爬虫抓取 客户端javascript渲染生成的html页面 都极为 困难, Java里面有 HtmlUnit, 而Python里,我们可以使用独立的跨平台的CasperJS。 创建site.js(接口文件,输入:url,输出:html file) //USAGE: ...
5. **自动化测试**:PhantomJS可以作为自动化测试工具,用于端到端的Web应用测试,例如使用CasperJS或者Jasmine框架进行测试。 6. **性能分析**:PhantomJS可以记录页面加载时间、资源下载速度等信息,帮助开发者...
CasperJS + PhantomJS的无头抓取 入门 您必须已全局安装npm , casperjs , phantomjs apt-get install npm npm install -g phantomjs npm install -g casperjs cd到项目根目录然后运行 npm install grunt ...
在本文中,我们将深入探讨CasperJS的核心概念、主要功能以及如何使用它进行网页抓取和自动化测试。 1. **核心概念** - **PhantomJS和SlimerJS**: CasperJS依赖于这两个无头浏览器引擎。PhantomJS是基于WebKit的,...
总的来说,"casperjs1.1.0-beta3.jar"文件是CasperJS的一个旧版本,对于需要在Windows环境下使用CasperJS进行Web自动化和测试的用户来说,是一个可选项。不过,考虑到软件的持续发展,建议用户考虑使用最新稳定版以...
需要casperjs MacOSXbrew install casperjs --devel Linux wget tar -xvf phantomjs-1.9.7-linux-x86_64.tar.bz2 须藤 mv phantomjs-1.9.7-linux-x86_64 /usr/local/src/phantomjs 须藤 ln -sf /usr/local/src/...
brew install casperjs --devel从来源cd /usr/sharesudo git clone git://github.com/n1k0/casperjs.gitcd casperjssudo ln -sf ` pwd ` /bin/casperjs /usr/local/bin/casperjs# Download phantomjs ...
CasperJS是一个基于Node.js的脚本库,用于进行浏览器自动化测试,尤其是网页抓取和爬虫开发。CasperJS使用Webkit或PhantomJS引擎,提供了一种简洁的方式来导航、操作和测试网页。因此,py-casper可能是Python中一个...
2. `casperjs-1.1.4-1` - 可能是CasperJS库的一个版本文件,表明项目中已经包含了CasperJS的环境。 3. `src` - 通常存放源代码的目录,可能包含Java或JavaScript代码。 4. `build` - 构建输出目录,可能包含编译后的...
利用casperjs +phantomjs实现登录抓取网页 并且截图;下载后解压后,在环境变量path中配置解压后bin目录的地址,如:E:\Program Files\casperjs\bin;E:\Program Files\phantomjs\bin
总的来说,`casperjs`在Linux环境下的使用为Java爬虫开发者提供了强大的工具,能够有效地抓取和解析JavaScript渲染的动态页面。通过深入理解`casperjs`的API和使用方式,你可以构建出更加健壮、高效的网络爬虫系统,...
针对magento进行了优化,但可以在所有电子商务商店中使用(使用正确的选择器)。要求Phantomjs(版本2更好) 卡斯珀可选:slimmerjs(用于壁虎)安装$ git clone git://github.com/n1k0/casperjs.git$ cd casperjs$...
安装casperjs 复制代码 代码如下: cd / git clone git://github.com/n1k0/casperjs.git cd casperjs ln -sf /casperjs/bin/casperjs /usr/local/bin/casperjs //可以忽略 实际执行中php是执行 /casperjs/...
【标题】中的“casperjs-creditcard-checker”是一个基于CasperJS的工具,用于检查信用卡的有效性,尤其提及了与gofundme.com这个众筹平台的商人有关。这表明该工具可能被用于验证在该平台上进行捐赠时输入的信用卡...
这个小技巧使用的是一种简单的技术:PhantomJS或CasperJS通过captureBase64('png')捕获屏幕,然后将图像发布到接收服务器,然后通过socket.io将其发送到显示的浏览器它是嵌入式图像。 下面是它的工作原理: 设置...
CasperJS是一个开源的,用JavaScript编写的,基于PhantomJS的导航脚本和测试工具 ,它简化了定义一个完成的导航操作所需的步骤,还提供了很有用的函数封装,方法,和语法糖,它可以完成下面这些常见任务: 定义 & 排序...