zoukankan      html  css  js  c++  java
  • python爬虫积累(一)--------selenium+python+PhantomJS的使用(转)

     

    正文

      最近按公司要求,爬取相关网站时,发现没有找到js包的地址,我就采用selenium来爬取信息,相关实战链接:python爬虫实战(一)--------中国作物种质信息网

    一、Selenium介绍

      Selenium 是什么?一句话,自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器,如果你在这些浏览器里面安装一个 Selenium 的插件,那么便可以方便地实现Web界面的测试。换句话说叫 Selenium 支持这些浏览器驱动。Selenium支持多种语言开发,比如 Java,C,Ruby等等,有 Python 吗?那是必须的!安装只要cmd中 pip install selenium 即可。

    二、爬虫为什么要用selenium?

     对于一般网站来说scrapy、requests、beautifulsoup等都可以爬取,但是有些信息需要执行js才能显现,而且你肉眼所能看到的基本都能爬取下来,在学习中遇到了,就记录下来方便以后查看。

     webdrive是selenium中一个函数:

    1 from selenium import webdriver
    2 driver = webdriver.PhantomJS()
    3 driver.get('网址')

    其中PhantomJS同时可以换成Chrome、Firefox、Ie等等,但是PhantomJS是一个无头的浏览器,运行是不会跳出相应的浏览器,运行相对效率较高。在调试中可以先换成Chrome,方便调试,最后再换成PhantomJS即可。

    三、PhantomJS介绍

      PhantomJS是一个基于webkit的JavaScript API。它使用QtWebKit作为它核心浏览器的功能,使用webkit来编译解释执行JavaScript代码。任何你可以在基于webkit浏览器做的事情,它都能做到。它不仅是个隐形的浏览器,提供了诸如CSS选择器、支持Web标准、DOM操作、JSON、HTML5、Canvas、SVG等,同时也提供了处理文件I/O的操作,从而使你可以向操作系统读写文件等。PhantomJS的用处可谓非常广泛,诸如前端无界面自动化测试(需要结合Jasmin)、网络监测、网页截屏等。

      PhantomJS官方地址:http://phantomjs.org/

      PhantomJS官方API:http://phantomjs.org/api/

      PhantomJS官方示例:http://phantomjs.org/examples/

      PhantomJS GitHub:https://github.com/ariya/phantomjs/

    四、PhantomJS安装

    本人windowns7系统,把下载下来的phantomjs.exe移到你所用python文件夹下的Script中就可以使用了。(下载PhantomJS-2.1.1-windowns.zip链接:http://pan.baidu.com/s/1c8HeBc 密码:2zm4)

    小测试:

    复制代码
    1 from selenium import webdriver
    2 driver = webdriver.PhantomJS()
    3 driver.get("http://hotel.qunar.com/")
    4 data = driver.title
    5 print data
    6 
    7 #输出
    8 【去哪儿酒店】酒店预订, 酒店查询-去哪儿网Qunar.com
    复制代码

    五、操作实战

    复制代码
     1 # -*-coding:utf-8-*-
     2 from selenium import webdriver  
     3 import time
     4 import win32api
     5 import re
     6 import win32con
     7 browser = webdriver.PhantomJS()
     8 '''PhantomJS的屏幕截图是滚动底部的,而Chrome没有'''
     9   
    10 browser.get("http://flight.qunar.com/")  #打开去哪儿官网
    11 a=browser.get_screenshot_as_file("E:/Python27/test2.jpg")  #屏幕截图
    12 
    13 browser.find_element_by_id("searchTypeRnd").click() #点击往返
    14 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input').clear() #先清理下输入框,默认是有地方的
    15 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[1]/div/input').send_keys(u"北京")  #输入起点位置
    16 
    17 '''这里涉及到win32api可以参考相关手册----以下是键盘操作'''
    18 time.sleep(0.5)
    19 win32api.keybd_event(108,0,0,0)  #按enter键
    20 #按某个键 win32api.keybd_event(键位码,0,0,0)
    21 win32api.keybd_event(108,0,win32con.KEYEVENTF_KEYUP,0)#释放按键
    22 #释放按键 win32api.keybd_event(键位码,0,win32con.KEYEVENTF_KEYUP,0)
    23 
    24 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input').clear()
    25 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[2]/div[2]/div/input').send_keys(u"上海")  #输入终点位置
    26 time.sleep(0.5)
    27 win32api.keybd_event(108,0,0,0)   #按enter键
    28 win32api.keybd_event(108,0,win32con.KEYEVENTF_KEYUP,0)  #释放按键
    29 
    30 browser.find_element_by_xpath('//*[@id="fromDate"]').clear()
    31 browser.find_element_by_xpath('//*[@id="fromDate"]').send_keys("2017-04-19")  #输入出发时间
    32 #browser.find_element_by_xpath('//*[@id="fromDate"]').click()
    33 browser.find_element_by_xpath('//*[@id="toDate"]').clear()
    34 browser.find_element_by_xpath('//*[@id="toDate"]').send_keys("2017-04-22")  #输入返程时间
    35 #browser.find_element_by_xpath('//*[@id="toDate"]').click()
    36 
    37 
    38 '''法二设置地点和时间'''
    39 #browser.find_element_by_name("name").send_keys("北京(BJS)")  #设置值
    40 #browser.find_element_by_name("pass").send_keys("上海(SHA)")  #设置值
    41 #browser.find_element_by_id("txtAirplaneTime1").send_keys("2016-12-19")  #设置值
    42 
    43 browser.find_element_by_xpath('//*[@id="dfsForm"]/div[4]/button').click() #点击按钮 提交表单
    44 browser.maximize_window()  #最大窗口
    45 
    46 '''保存当前网页'''
    47 print(browser.current_url)  #当前url
    48 #browser.get("http://www.ly.com/FlightQuery.aspx")#cookie保存在对象中,对需认证页面可直接访问
    49 data=browser.page_source.encode("utf-8","ignore")
    50 fh=open("E:/python27/qun.html","wb")
    51 fh.write(data)
    52 fh.close()
    53 data2=browser.page_source
    54 #print data2
    55 a=browser.get_screenshot_as_file("E:/Python27/test.jpg")
    56 #print(browser.page_source)
    57 
    58 ''''后续可以抓取一些东西'''
    59 
    60 browser.quit()
    复制代码

    六、在此推荐虫师博客的学习资料

    下面会用  selenium + webdriver + python 实现

    关系:

      selenium 自动化测试工具 :selnium 1.0 包括:selenium RC 、selenium IDE 、selenium GRID、selenium CORE

      webdriver  google的自动化测试框架(或者说是套规范API)

      webdriver 与seleinum  各有优点,两个团队都认为合并会更牛逼,于是:

      selenium 2.0 = selenium RC + webdriver

      selenium 可以使用多种语言实现:C# , java , python , ruby ....

    环境搭建:

    selenium + python自动化测试环境搭建

    译:selenium webdriver (python)

    ----------------轻松自动化系列目录-----------

    轻松自动化---selenium-webdriver(python) (一)

    开始我们的第一个脚本:

    •  熟悉selenium python 代码样式
    •  time.sleep()  添加休眠时间
    •  print   打印输出信息

    轻松自动化---selenium-webdriver(python) (二)

    •  打印URL
    •  将浏览器最大化
    •  设置浏览器固定宽、高
    •  操控浏览器前进、后退

    轻松自动化---selenium-webdriver(python) (三)

    * 简单对象定位:

    • · id
    • · name
    • · class name
    • · link text
    • · partial link text
    • · tag name
    • · xpath
    • · css selector

    轻松自动化---selenium-webdriver(python) (四)

    • 定位一组元素

    轻松自动化---selenium-webdriver(python) (五)

    • 层级定位

    轻松自动化---selenium-webdriver(python) (六)

    操作对象:

    • · click 点击对象
    • · send_keys 在对象上模拟按键输入
    • · clear 清除对象的内容,如果可以的话

    WebElement  另一些常用方法:

    • · text  获取该元素的文本
    • · submit  提交表单
    • · get_attribute  获得属性值

    轻松自动化---selenium-webdriver(python) (七)

    多层框架或窗口的定位:

    • switch_to_frame()
    • switch_to_window()

    智能等待:

    • implicitly_wait()

    轻松自动化---selenium-webdriver(python) (八) 

    调用js方法

    execute_script(script, *args)

    轻松自动化---selenium-webdriver(python) (九)

    • 上传文件

    轻松自动化---selenium-webdriver(python) (十)

    • 处理下拉框
    • switch_to_alert()  
    • accept()

    轻松自动化---selenium-webdriver(python) (十一)

    •    控制滚动条到底部

    轻松自动化---selenium-webdriver(python) (十二)

    • l 键盘按键用法
    • l 键盘组合键用法
    • l send_keys() 输入中文运行报错问题

    selenium-webdriver(python) (十三) -- cookie处理

    • driver.get_cookies() 获得cookie信息
    • add_cookie(cookie_dict)  向cookie添加会话信息
    • delete_cookie(name)   删除特定(部分)的cookie
    • delete_all_cookies()    删除所有cookie

    selenium-webdriver(python) (十四) -- webdriver原理

    • webdriver 原理分析

    selenium-webdriver(python) (十五) -- 鼠标事件

    •   context_click()  右击
    •   double_click()   双击
    •   drag_and_drop()  拖动

    selenium-webdriver(python) (十六) --unittest 框架

    • 浅析unittest测试框架

    作者:今孝
    出处:http://www.cnblogs.com/jinxiao-pu
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

    参考链接:http://www.cnblogs.com/zzhzhao/p/5380376.html

           http://www.cnblogs.com/BigFishFly/p/6380024.html

    欢迎博友指出错误,我将改进,共同提高技术。
  • 相关阅读:
    hdu 4521 小明系列问题——小明序列(线段树 or DP)
    hdu 1115 Lifting the Stone
    hdu 5476 Explore Track of Point(2015上海网络赛)
    Codeforces 527C Glass Carving
    hdu 4414 Finding crosses
    LA 5135 Mining Your Own Business
    uva 11324 The Largest Clique
    hdu 4288 Coder
    PowerShell随笔3 ---别名
    PowerShell随笔2---初始命令
  • 原文地址:https://www.cnblogs.com/it-tsz/p/10592691.html
Copyright © 2011-2022 走看看