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

,有些网页是在加载时动态创建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 selenium
http://npm.taobao.org/dist/phantomjs/ 
#下载安装包(sudo apt-get install phantomjs安装的不是最新的,发现不能用)
phantomjs-2.1.1-linux-i686.tar.bz2
tar -jxvf phantomjs-2.1.1-linux-i686.tar.bz2

使用:

from selenium import webdriver
driver = 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").text
print driver.find_element_by_csss_selector("#content").text
print driver.find_element_by_id("content").text
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值