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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM