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

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

安裝selenium:

  • pip install selenium    不知道是不是我凌晨安裝的原因,估計服務器在維護,一直下載不下來,白天就好了,但是速度是真的慢
  • 注意:如果需要用谷歌瀏覽器模擬的話,還需要安裝谷歌瀏覽器的驅動,將驅動複製到python根目錄下即可(同理,需要用什麼瀏覽器模擬就要裝對應的驅動,同時也需要注意版本)
  • 谷歌瀏覽器驅動下載: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')     # 向瀏覽器發出訪問請求

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

  1. 首先我們得在輸入框中輸入我們想要搜索的關鍵字
    想要在搜索框裏面輸入文本,那麼就需要先找到這個文本框

    我們發現這個輸入框的 id=“kw”,那麼我們通過這個就可以找到這個輸入框了
    driver.find_element_by_id('kw')    # 在頁面中查找id爲“kw”的控件
    但是我們現在只是找到了這個輸入框,又需要怎麼向這個輸入框裏面輸入文本呢?
    driver.find_element_by_id('kw').send_keys('python')    # send_keys()鍵入關鍵字
  2. 然後我們點擊“百度一下”這個按鈕實現搜索功能
    同樣的道理,我們搜索按鈕的id,先找到這個控件,然後通過單擊事件模擬點擊搜索
    driver.find_element_by_id('su').click()    # 搜索“百度一下”按鈕,並單擊

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

  1. 首先我們想要模擬訪問頁面,得先指定瀏覽器,創建一個瀏覽器對象
  2. 然後就需要輸入我們想要搜索的網址
  3. 後面就是要搜索定位,找到我們需要控制的,或者需要進行操作的控件在哪裏
  4. 找到控件,我們就可以進行鍵入、點擊、數據分析提取等操作了

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

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

上圖就是我們剛纔輸入框的相關源碼,我們發現這裏面有幾個屬性,我們發現跟我們八種方法比對,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')


我們發現最上面有幾個鏈接,可以到百度新聞、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()   # 根據部分超鏈接文本定位

我們發現點擊百度主頁的logo,鏈接到的是搜索今日新鮮事,那我們來模擬一下點擊logo跳轉到今日新鮮事:


我們發現這個logo的標籤是map,非常特別,搜索了一下:發現只有一個,那麼我們可以直接用標籤名字來進行定位:

from selenium import webdriver

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


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

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

還是這個輸入框,我們先用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')

我們最後來總結一下:

元素定位的八種方法

方法 說明 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 獲取元素的大小和位置信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章