首页 » Python » 【张亚楠】Selenium+PhantomJS+Xpath抓取网页JS内容

【张亚楠】Selenium+PhantomJS+Xpath抓取网页JS内容

 
文章目录

之前抓一个爬虫代理网站,发现在port上做了点手脚,使用了JS去计算port的方式,比如<script>document.write((2773^seal)+837);</script>。就这样一个改动搞得我费劲心思,用最笨的方法虽然能实现,但太繁琐,代码量太大,有一种操作起重机抓纸牌的感觉。最后想到了Selenium的方式,虽然速度慢了点,但可以轻松获取。

安装

Linux

sudo pip install selenium
sudo apt-get install PhantomJS

Windows

  • Selenium下载地址:https://pypi.python.org/pypi/selenium#downloads
  • PhantomJS下载地址:http://phantomjs.org/download.html

原理

关于Selenium

Selenium是一个Web的自动化测试工具,可以在多平台下操作多种浏览器进行各种动作,比如运行浏览器,访问页面,点击按钮,提交表单,浏览器窗口调整,鼠标右键和拖放动作,下拉框和对话框处理等,算是QA自动化测试的必备工具。我们抓取时选用它,主要是Selenium可以渲染页面运行页面中的JS,以及其点击按钮提交表单等操作。但就是因为Selenium会渲染页面,所以相对于requests+BeautifulSoup会慢上一些。

关于PhantomJs

PhantomJs可以看作一个没有页面的浏览器,有渲染引擎(QtWebkit)和JS引擎(JavascriptCore)。PhantomJs有DOM渲染,JS运行,网络访问,网页截图等多个功能。

使用PhantomJS,而不用Chromedriver和firefox,主要是因为PhantomJS的静默方式(后台运行,不打开浏览器)。

抓取示例

牛刀小试 – 抓取zhidaow.com Title

先拿一个简单的例子试手,之前这样的内容一般用requests+BeautifulSoup或者Scrapy处理。

from selenium import webdriver browser = webdriver.PhantomJS('D:phantomjs.exe') #浏览器初始化;Win下需要设置phantomjs路径,linux下置空即可 
url = 'http://www.zhidaow.com' # 设置访问路径 
browser.get(url) # 打开网页 
title = browser.find_elements_by_xpath('//h2') # 用xpath获取元素 
for t in title: # 遍历输出
    print t.text # 输出其中文本 
    print t.get_attribute('class') # 输出属性值 
browser.quit() # 关闭浏览器。当出现异常时记得在任务浏览器中关闭PhantomJS,因为会有多个PhantomJS在运行状态,影响电脑性能 

以下是本次测试的运行结果:

抓取爱站流量

爱站在网站的综合查询首页(如http://www.aizhan.com/siteall/tuniu.com/),历史流量部分采用了JS的形式。抓取这部分数据,requests+BeautifulSoup就使不上力了,也正是Selenium+PhantomJS的优势所在。

以下是代码:

from selenium import webdriver browser = webdriver.PhantomJS('D:phantomjs.exe') 
url = 'http://www.aizhan.com/siteall/tuniu.com/' 
browser.get(url) 
table = browser.find_elements_by_xpath('//*[@id="history1"]/table/tbody/tr[1]') # 用Xpath获取table元素 
for t in table: 
    print t.text 
rowser.quit()

运行结果:

2015-09-24 3534 – – – –

其他功能

  • browser.page_source # 源代码,可结合BeautifulSoup使用
  • browser.current_url # 当前URL

参考资料

备注

文章来源:张亚楠博客:http://www.zhidaow.com/post/selenium-phantomjs-xpath

原文链接:【张亚楠】Selenium+PhantomJS+Xpath抓取网页JS内容,转载请注明来源!

1