`

使用Selenium和PhantomJS解析带JS的网页

 
阅读更多
有的网页,不能直接通过wget/curl等命令、或者直接使用Python中的liburl这样的函数库来直接获取其真正展现给用户的信息,因为里面包含有JavaScript脚本(而该JS和页面数据的生成相关),需要通过Firefox、Chrome等浏览器渲染后才能得到想要看的结果。
例如,我想查询的一个根据IP查询到地理位置的网页:http://www.ip.cn/125.95.26.81
为了写程序来自动获取我想要的数据,比如 http://www.ip.cn/125.95.26.81 中网页中的“广东省佛山市 电信”这几个字。一般来说,有如下两种方案:
1. 写Web UI自动化脚本,用Selenium启动真正的浏览器(如:IE、Firefox)来打开该网页,然后调用webdriver获取想要的页面元素。
2. 找一种浏览器渲染引擎,能够让其解析网页并执行网页中需要初始化JS,然后将JS、CSS等执行后的HTML代码输出出来。
启动真正的浏览器,可能带来两个问题:一个是需要的时间较长,另一个是UI自动化易受干扰、不够稳定。
而第2个方法,一时没有找到特别好的库(暂用Python语言)。
根据网上的一些方案和请教同事,最后在Selenium webdriver中找到了不启动浏览器但是带基于Webkit引擎的名为“PhantomJS”的driver。后来找资料发现,LinkedIn、Twitter等知名互联网公司也在使用PhantomJS用于测试。
对于PhantomJS的好处,可阅读:http://phantomjs.org/ (Headless Website Testing, Screen Capture,Page Automation, Network Monitoring)
对于哪些情况下不适合用PhantomJS而应该用真正的Browser,可阅读:http://www.chrisle.me/2013/08/5-reasons-i-chose-selenium-over-phantomjs/
这里就不专门说PhantomJS的优劣势了,不过,它能解决我当前的问题。

先通过官方网站下载PhantomJS的可执行文件即可;然后像正常写Selenium自动化脚本一样来做即可。

我的一个示例程序如下:

[Copy to clipboard]View Code BASH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
Created on Dec 6, 2013

@author: Jay <smile665@gmail.com>
@description: use PhantomJS to parse a web page to get the geo info of an IP
'''

from selenium import webdriver

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

driver = webdriver.PhantomJS(executable_path='./phantomjs')  #这要可能需要制定phatomjs可执行文件的位置
driver.get("http://www.ip.cn/125.95.26.81")
#print driver.current_url
#print driver.page_source
print driver.find_element_by_id('result').text.split('\n')[0].split('来自:')[1]
driver.quit
[Copy to clipboard]View Code BASH
1
2
jay@jay-linux:~/workspace/python_test$ python try_phantomjs.py
广东省佛山市 电信
当然,刚好目前的Selenium(2.38.2)和PhontomJS(1.9.2)一起用有bug,见我另一篇文章:Selenium 2.38.2 和 PhantomJS 1.9.2 一起使用的一个Bug

参考资料:
很好的入门指引:http://www.realpython.com/blog/python/headless-selenium-testing-with-python-and-phantomjs/
官方说明:

https://github.com/detro/ghostdriver

http://phantomjs.org/

http://phantomjs.org/users.html

一个和PhantomJS类似的东东,不过它基于Gecko而不是Webkit:http://slimerjs.org/
这里有位兄台也使用PhantomJS抓取数据,可以看一下:http://blog.chinaunix.net/uid-22414998-id-3692113.html
分享到:
评论

相关推荐

    C#使用Selenium+PhantomJS抓取数据

    通过以上步骤,你可以在C#环境中利用Selenium WebDriver和PhantomJS实现对JavaScript渲染网页的数据抓取。这为处理动态网页提供了便利,特别是在自动化爬虫任务中,能有效获取到页面完整且动态生成的内容。在实际...

    Selenium+PhantomJS+python获取html动态生成的数据

    在IT行业中,自动化测试和网页数据抓取是两个重要的领域,而Selenium、PhantomJS以及Python在这两个领域中都扮演着关键角色。本话题主要关注如何利用Selenium结合PhantomJS通过Python来获取HTML动态生成的数据。 ...

    基于Python3的动态网站爬虫,使用selenium+phantomjs实现爬取动态网站, 本项目以爬取今日头条为例.zip

    4. **phantomjs的运用**:phantomjs是一款无头浏览器,它没有图形界面,但可以执行JavaScript,非常适合自动化测试和网页抓取。在本项目中,我们将selenium与phantomjs结合,实现对动态网页的无界面抓取,减少了资源...

    WebCollector+Selenium+Phantomjs

    爬虫简介: WebCollector是一个无须配置、便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量...源码中集成了Jsoup,可进行精准的网页解析。2.x版本中集成了selenium,可以处理javascript生成的数据。

    基于C#.NET+PhantomJS+Sellenium的高级网络爬虫系统设计与实现

    在C#.NET中,可以使用Selenium WebDriver接口与PhantomJS配合,进一步提升爬虫的交互能力和适应性。通过Selenium,可以模拟用户的各种操作,如滚动页面、触发事件等,使爬虫能够处理更复杂的网页逻辑。 在项目...

    Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容

    示例代码中使用了Selenium的webdriver来控制PhantomJS浏览器,通过加载URL并执行JavaScript,最终抓取到了京东手机页面中的手机名称和价格信息。 在实际应用中,这样的爬虫可以应用于多种场景,比如价格监控、市场...

    AngleSharp+PhantomJS获取动态网页(c#).rar

    开发者可能在这里编写了启动Selenium、配置PhantomJS、初始化AngleSharp解析器、发送网络请求、解析网页和提取数据的主要代码。 总结起来,这个项目展示了如何利用C#、AngleSharp和Selenium PhantomJS来处理动态...

    selenium+PhantomJS爬取豆瓣读书

    本文介绍了如何使用Selenium和PhantomJS工具来爬取豆瓣读书网站的相关信息。Selenium是一种用于Web应用程序测试的工具,它可以模拟浏览器中的用户行为,包括导航、点击按钮、填写表单等。PhantomJS是一个无头浏览器...

    selenium-phantomjs:使用Selenium Web驱动程序和PhantomJS下载HTML源代码-html source download

    6. **安装与配置**:使用Selenium和PhantomJS之前,需要先确保正确安装了它们,这通常涉及下载PhantomJS二进制文件并将其添加到系统路径,以及安装Python的`selenium`库。 7. **异常处理**:在编写自动化脚本时,...

    PhantomJs+selenium webdriver+验证码识别

    PhantomJs是一款无头浏览器,它允许你在没有GUI(图形用户界面)的情况下运行JavaScript和WebPage,这在自动化测试和网页抓取时非常有用。Selenium WebDriver是一个用于自动化浏览器的工具,它可以控制浏览器进行...

    taobaospider:淘宝商品信息爬取:selenium + phantomJS + pyqurey + mongo

    "selenium + phantomJS + pyqurey + mongo"揭示了该项目使用的技术栈,包括自动化浏览器测试库Selenium,无头浏览器 PhantomJS,Python的数据库查询库Pyquery,以及用于数据存储的MongoDB数据库。 【描述分析】 ...

    Crystal:一个基于scrapy+selenium+phantomjs的爬虫程序,用于抓取多个学校的学术报告信息

    3. **引入Selenium和PhantomJS**:在需要处理动态内容的地方,使用Selenium启动PhantomJS实例,通过执行JavaScript来加载和渲染页面。Selenium的WebDriver API允许与PhantomJS进行交互,执行点击、滚动、等待等操作...

    selenium在执行phantomjs的API并获取执行结果的方法

    Selenium 和 PhantomJS 是两个非常强大的工具,在自动化测试和网页抓取领域应用广泛。本文主要介绍如何利用 Selenium 控制 PhantomJS 来执行特定的 API 并获取执行结果,这对于那些需要进行动态网页抓取的任务特别...

    人工智能-项目实践-C#-基于C#.NET+PhantomJS+Sellenium的高级网络爬虫程序 可执行Javascript

    在本项目实践中,我们探索了如何使用C#.NET框架结合PhantomJS和Selenium构建一个高级的网络爬虫程序,该程序能够处理JavaScript渲染的网页并执行JavaScript代码,从而更全面地获取网络数据。以下是对这个项目的详细...

    phantomjs自动化测试demo

    `run.js`可能是包含了自动化测试逻辑的文件,例如,它可能使用了Page Object模式或者Selenium WebDriver API来模拟用户交互,如点击按钮、填写表单等。 自动化测试是软件开发过程中的重要环节,它能够有效地检查...

    phantomjs 2.1.1-windows版

    2. **基于Webkit**:PhantomJS使用WebKit作为其渲染引擎,这意味着它能准确地模拟真实浏览器的行为,这对于网页自动化和测试至关重要,因为这意味着你可以信任它对网页的解析和执行。 3. **JavaScript API**:...

    phantomjs2.0

    4. **网页抓取和数据提取**:由于PhantomJS可以像普通浏览器一样加载和解析HTML,它非常适合网页抓取和数据提取任务。开发者可以通过JavaScript代码来遍历DOM,提取所需信息,或者模拟用户交互,如点击按钮、填写...

Global site tag (gtag.js) - Google Analytics