(python解析js)selenium结合phantomjs抓取js生成的页面

来源:互联网 发布:js中有哪些事件 编辑:程序博客网 时间:2024/04/27 21:37

,有些网页是在加载时动态创建HTML内容,只要在js代码完全执行完后才会显示最终结果。如果用传统的方法抓取页面,就只能获得js代码执行之前页面上的内容。

要解决这个问题有两种方法:

  1.直接从js代码中抓取数据(执行js代码,解析js变量)。  2.用第三方库运行js,抓取运行后的最终html页面。

在python中使用selenium执行js

selenium是一个强大的网络数据采集工具,其最初是为网站自动化测试而开发的。selenium可以让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或判断网站上某些动作是否发生。

selenium自己不带浏览器,它需要与第三方浏览器结合一起使用。这里使用phantomjs的工具代替真实的浏览器。

PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API。它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, Canvas, 和 SVG。 PhantomJS 可以用于 页面自动化 , 网络监测 , 网页截屏 ,以及 无界面测试 等。

把selenium和phantomjs结合在一起,就可以运行一个非常强大的爬虫了,可以处理cookie,js,header,以及任何需要你做的事。

安装:

selenium有python库,可以用pip等安装;phantomjs是一个功能完善的“无头“浏览器,并非一个python库,所以它不需要想python的其他库一样安装,也不能用pip安装。

sudo pip install seleniumhttp://npm.taobao.org/dist/phantomjs/ #下载安装包(sudo apt-get install phantomjs安装的不是最新的,发现不能用)phantomjs-2.1.1-linux-i686.tar.bz2tar -jxvf phantomjs-2.1.1-linux-i686.tar.bz2

使用:

from selenium import webdriverdriver = webdriver.PhantomJS(executable_path='/opt/phantomjs-2.1.1-linux-i686/bin/phantomjs')#executable_path为你的phantomjs可执行文件路径driver.get("http://news.sohu.com/scroll/")#或得js变量的值r = driver.execute_script("return newsJason")print r#selenium在webdriver的DOM中使用选择器来查找元素,名字直接了当,by对象可使用的选择策略有:id,class_name,css_selector,link_text,name,tag_name,tag_name,xpath等等print driver.find_element_by_tag_name("div").textprint driver.find_element_by_csss_selector("#content").textprint driver.find_element_by_id("content").text
0 0
原创粉丝点击