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

    欢迎博友指出错误,我将改进,共同提高技术。
  • 相关阅读:
    [CF1076D] Edge Deletion
    [CF1081D] Maximum Distance
    [CF1095F] Make It Connected
    [CF1328E] Tree Queries
    [CF1328F] Make k Equal
    Codeforces Round #629 (Div. 3) 总结
    [CF1131D] Gourmet choice
    [CF1176D] Recover it!
    [CF1205B] Shortest Cycle
    [CF1213G] Path Queries
  • 原文地址:https://www.cnblogs.com/it-tsz/p/10592691.html
Copyright © 2011-2022 走看看