天天看點

Python3爬蟲——selenium學習筆記(一)

Selenium是一個自動化web應用程式測試工具,它可以模拟我們浏覽器,所有的操作就像是我們自己真實在操作一樣,使用selenium我們可以模拟登陸、點選等網頁操作,裡面也提供了一些資料抓取的工具,我們可以通過頁面模拟對資料進行抓取;好了廢話不多說,直接一步一步分析:

安裝selenium:

  • pip install selenium    不知道是不是我淩晨安裝的原因,估計伺服器在維護,一直下載下傳不下來,白天就好了,但是速度是真的慢
  • 注意:如果需要用谷歌浏覽器模拟的話,還需要安裝谷歌浏覽器的驅動,将驅動複制到python根目錄下即可(同理,需要用什麼浏覽器模拟就要裝對應的驅動,同時也需要注意版本)
    Python3爬蟲——selenium學習筆記(一)
  • 谷歌浏覽器驅動下載下傳:http://npm.taobao.org/mirrors/chromedriver/
  • 火狐浏覽器驅動下載下傳:http://ftp.mozilla.org/pub/firefox/releases/

我們先模拟通路百度頁面看看:

from selenium import webdriver    # 導入庫

driver = webdriver.Chrome()            # 建立一個谷歌浏覽器對象
driver.get('http://www.baidu.com')     # 向浏覽器發出通路請求
           
Python3爬蟲——selenium學習筆記(一)

現在頁面打開了,我們想搜尋東西,改怎麼辦呢?

  1. 首先我們得在輸入框中輸入我們想要搜尋的關鍵字

    想要在搜尋框裡面輸入文本,那麼就需要先找到這個文本框

    Python3爬蟲——selenium學習筆記(一)
    我們發現這個輸入框的 id=“kw”,那麼我們通過這個就可以找到這個輸入框了
    driver.find_element_by_id('kw')    # 在頁面中查找id為“kw”的控件
               
    但是我們現在隻是找到了這個輸入框,又需要怎麼向這個輸入框裡面輸入文本呢?
    driver.find_element_by_id('kw').send_keys('python')    # send_keys()鍵入關鍵字
               
    Python3爬蟲——selenium學習筆記(一)
  2. 然後我們點選“百度一下”這個按鈕實作搜尋功能

    同樣的道理,我們搜尋按鈕的id,先找到這個控件,然後通過單擊事件模拟點選搜尋

    driver.find_element_by_id('su').click()    # 搜尋“百度一下”按鈕,并單擊
               
    Python3爬蟲——selenium學習筆記(一)

ok,這是我們最簡單的一個應用,現在總結下:

  1. 首先我們想要模拟通路頁面,得先指定浏覽器,建立一個浏覽器對象
  2. 然後就需要輸入我們想要搜尋的網址
  3. 後面就是要搜尋定位,找到我們需要控制的,或者需要進行操作的控件在哪裡
  4. 找到控件,我們就可以進行鍵入、點選、資料分析提取等操作了

那麼,建立浏覽器對象和搜尋網頁這兩步應該不用多說了,接下來我們着重對定位方式來講解一下:

Python3爬蟲——selenium學習筆記(一)

通過上圖我們可知提供了八種定位的方式給我們,那麼他們分别是什麼意思呢?我們通過實踐來了解一下:

Python3爬蟲——selenium學習筆記(一)

上圖就是我們剛才輸入框的相關源碼,我們發現這裡面有幾個屬性,我們發現跟我們八種方法比對,id、name和class是有的,簡單明了,我們看下使用方法,其實達到的效果都是一樣的,但是需要注意的,屬性和值一定需要在這個頁面是唯一的:

driver.find_element_by_id('kw').send_keys('python')
driver.find_element_by_name('wd').send_keys('python')
driver.find_element_by_class_name('s_ipt').send_keys('python')
           
Python3爬蟲——selenium學習筆記(一)

我們發現最上面有幾個連結,可以到百度新聞、hao123等地方,如果我們想通過單擊通路hao123該怎麼辦呢?

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_link_text('hao123').click()        # 根據完整的超連結對應文本定位
driver.find_element_by_partial_link_text('hao').click()   # 根據部分超連結文本定位
           
Python3爬蟲——selenium學習筆記(一)

我們發現點選百度首頁的logo,連結到的是搜尋今日新鮮事,那我們來模拟一下點選logo跳轉到今日新鮮事:

Python3爬蟲——selenium學習筆記(一)
Python3爬蟲——selenium學習筆記(一)
Python3爬蟲——selenium學習筆記(一)

我們發現這個logo的标簽是map,非常特别,搜尋了一下:

Python3爬蟲——selenium學習筆記(一)

發現隻有一個,那麼我們可以直接用标簽名字來進行定位:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
driver.find_element_by_tag_name('map').click()
           
Python3爬蟲——selenium學習筆記(一)

在我們頁面中,可能會有很多名字相同的标簽,那麼這樣查找出來的結果就會非常多,那麼單獨使用的意義也就不大了,可以通過和其他的方法聯合使用,先縮小範圍,然後再用标簽定位;

接下來我們就用XPath進行定位,或者說縮小範圍:

Python3爬蟲——selenium學習筆記(一)

還是這個輸入框,我們先用XPath直接進行定位,實作輸入關鍵字的效果

from selenium import webdriver

driver = webdriver.Chrome()
driver.get('http://www.baidu.com')

driver.find_element_by_xpath("//input[@id='kw']").send_keys('python')
           
Python3爬蟲——selenium學習筆記(一)

我們最後來總結一下:

元素定位的八種方法

方法 說明 find_element_by_id() 通過屬性id進行定位 find_element_by_name() 通過屬性name進行定位 find_element_by_class_name() 通過class名進行定位 find_element_by_link_text() 通過完整的超連結對應文本進行定位 find_element_by_partial_link_text() 通過部分超連結對應文本進行定位 find_element_by_tag_name() 通過标簽進行定位 find_element_by_xpath() 通過xpath進行定位 find_element_by_css_selector() 通過css選擇器進行定位(這裡先不講)

幾種常見的浏覽器控制方法

方法 說明 set_window_size() 設定浏覽器大小 back() 頁面後退 forward() 頁面前進 refresh() 頁面重新整理

clear()

清除文本 close() 關閉單個視窗 quit() 關閉所有視窗 send_keys(字元串) 模拟按鍵輸入 click() 單擊 save_screenshot(儲存路徑) 儲存螢幕截圖 submit() 送出表單 get_attribute(屬性名稱) 擷取屬性值 text 擷取元素文本 size 擷取元素大小 rect 擷取元素的大小和位置資訊