您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Python Selenium如何爬取每日天氣”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Python Selenium如何爬取每日天氣”這篇文章吧。
1、Selenium的介紹與安裝
Selenium是一個Web的自動化(測試)工具,它可以根據我們的指令,讓瀏覽器執行自動加載頁面,獲取需要的數據等操作。
爬蟲,就是一段自動抓取互聯網信息的程序,從互聯網上抓取對于我們有價值的信息,就好像一只蟲子在一幢樓里不知疲倦地爬來爬去。
傳統的爬蟲通過直接模擬 HTTP 請求來爬取站點信息,由于這種方式和瀏覽器訪問差異比較明顯,很多站點都采取了一些反爬的手段。 Selenium 是通過模擬瀏覽器來爬取信息,其行為和用戶幾乎一樣,而且不用去分析每個請求的具體參數,比起傳統的爬蟲學起來更容易。唯一缺點是速度較慢,如果對爬蟲的速度沒有要求,那使用 Selenium 是個非常不錯的選擇。
Selenium的安裝相當簡單,直接pip install selenium在線安裝就行了。
2. chromedriver的下載與安裝
Selenium 自身并不具備瀏覽器的功能,它需要與第三方瀏覽器結合在一起才能使用。Google的Chrome瀏覽器能很方便的支持此項功能,只需安裝其驅動程序Chromedriver就可以了。
下載地址:http://chromedriver.storage.googleapis.com/index.html
如何查看瀏覽器版本?可以在地址欄輸入‘chrome://version/’,第一行就是版本信息。以小渣自己的瀏覽器為例,版本為76.0.3809.132(32位)。(補充,也可以在軟件通常都有的“關于”信息中找到)
解壓下載文件,得到chromedriver.exe。作為一個新手教程,小渣不建議去設置什么復雜的環境變量,后續在使用chromedriver時用加絕對路徑引用就行。
完成準備工作之后就可以進行爬蟲了。首先我們使用Selenium的瀏覽器驅動接口工具webdriver打開我們的爬取目標:中央氣象臺網站上的每日天氣圖。
代碼:
from selenium import webdriver ## 導入selenium的瀏覽器驅動接口 chrome_driver = 路徑+'chromedriver.exe' #chromedriver的文件位置 driver = webdriver.Chrome(executable_path = chrome_driver) #加載瀏覽器驅動 driver.get('http://www.nmc.cn/publish/observations/china/dm/weatherchart-h000.htm') #打開頁面
1、Selenium頁面元素定位
假設我們想下載500hPa高度的基本天氣分析圖,在平時我們會怎么做?肯定是在頁面上點擊500hPa,選擇基本天氣分析,然后對圖片右鍵另存為對不對?那么接下來我們就要借助Selenium對網頁進行控制,爬取的過程也就是模擬上述一系列人為操作讓機器來自動執行。
Selenium對網頁的控制是基于各種HTML結構元素的,在使用過程中,對于網頁各類元素的定位是基礎,只有準確抓取到對應元素才能進行后續的自動化控制。
1.1 查看頁面元素
Selenium定位時會涉及到一點HTML基礎知識,但不懂也沒關系,我們有偷懶的辦法。利用chrome瀏覽器的開發者工具,在chrome瀏覽器中右鍵點擊-->檢查,我們可以輕松地查看應的頁面元素。
舉個例子:我們移動鼠標到層次500hPa,就可以自動定位到500hPa層級按鈕對應的HTML元素了,查看到它的屬性,可以看到500hPa這個按鈕對應的頁面元素是link文字。
1.2 元素定位
元素查看完畢后,接著就要進行元素定位,顧名思義就是要找到這個元素在網頁中的位置,這樣后續才能進行精確的頁面控制。Selenium提供了很多種定位元素的方法,本文用到的主要有2個:
id定位:find_element_by_id()
link定位:find_element_by_link_text()
button1=driver.find_element_by_link_text('500hPa') #通過link文字精確定位元素 button2=driver.find_element_by_id('plist') #通過id精確定位元素 elem_pic = driver.find_element_by_id('imgpath') #通過id精確定位元素
2、ActionChains模擬鼠標操作
元素定位完成后,還需要模擬鼠標進行懸浮和單擊等操作來選擇和下載我們所需目標圖片。Selenium給我們提供了一個類來處理這類事件——ActionChains。這里用到的2個操作是:
鼠標懸浮操作:move_to_element ()
單擊鼠標左鍵:click()
下面給出完整的實現腳本:
from selenium import webdriver ## 導入selenium的瀏覽器驅動接口 from selenium.webdriver.common.action_chains import ActionChains import time import os chrome_driver = 路徑+'chromedriver.exe' #chromedriver的文件位置 driver = webdriver.Chrome(executable_path = chrome_driver) #加載瀏覽器驅動 driver.get('http://www.nmc.cn/publish/observations/china/dm/weatherchart-h000.htm') #打開頁面 # driver.maximize_window() time.sleep(1) #模擬鼠標選擇高度層 button1=driver.find_element_by_link_text('500hPa') #通過link文字精確定位元素 action = ActionChains(driver).move_to_element(button1) #鼠標懸停在一個元素上 action.click(button1).perform() #鼠標單擊 time.sleep(1) #注意加等待時間,避免因速度太快而失敗 for p in range(1,3): #下載昨日08點和20點的天氣圖 str_p=str(p) #模擬鼠標選擇時間 button2=driver.find_element_by_id('plist') #通過id精確定位元素 action = ActionChains(driver).move_to_element(button2) #鼠標懸停在一個元素上 action.click(button2).perform() #鼠標單擊 time.sleep(1) Select(button2).select_by_index(str_p) #下拉菜單通過文本值定位從0開始 time.sleep(1) #模擬鼠標選擇圖片 elem_pic = driver.find_element_by_id('imgpath') #通過id精確定位元素 action = ActionChains(driver).move_to_element(elem_pic) action.context_click(elem_pic).perform() #鼠標右擊 filename= str(elem_pic.get_attribute('src')).split('/')[-1].split('?')[0] #獲取文件名 print(filename) time.sleep(1)
以上是“Python Selenium如何爬取每日天氣”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。