PythonSelenium如何爬取每日天氣

這篇文章主要為大家展示了“Python Selenium如何爬取每日天氣”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Python Selenium如何爬取每日天氣”這篇文章吧。

成都創(chuàng)新互聯(lián)公司企業(yè)建站,10余年網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準(zhǔn)市場調(diào)研,為客戶提供的解決方案。

一、準(zhǔn)備工作

1、Selenium的介紹與安裝

Selenium是一個Web的自動化(測試)工具,它可以根據(jù)我們的指令,讓瀏覽器執(zhí)行自動加載頁面,獲取需要的數(shù)據(jù)等操作。

爬蟲,就是一段自動抓取互聯(lián)網(wǎng)信息的程序,從互聯(lián)網(wǎng)上抓取對于我們有價值的信息,就好像一只蟲子在一幢樓里不知疲倦地爬來爬去。

傳統(tǒng)的爬蟲通過直接模擬 HTTP 請求來爬取站點(diǎn)信息,由于這種方式和瀏覽器訪問差異比較明顯,很多站點(diǎn)都采取了一些反爬的手段。 Selenium 是通過模擬瀏覽器來爬取信息,其行為和用戶幾乎一樣,而且不用去分析每個請求的具體參數(shù),比起傳統(tǒng)的爬蟲學(xué)起來更容易。唯一缺點(diǎn)是速度較慢,如果對爬蟲的速度沒有要求,那使用 Selenium 是個非常不錯的選擇。

Selenium的安裝相當(dāng)簡單,直接pip install selenium在線安裝就行了。

2. chromedriver的下載與安裝

Selenium 自身并不具備瀏覽器的功能,它需要與第三方瀏覽器結(jié)合在一起才能使用。Google的Chrome瀏覽器能很方便的支持此項(xiàng)功能,只需安裝其驅(qū)動程序Chromedriver就可以了。

下載地址:http://chromedriver.storage.googleapis.com/index.html

如何查看瀏覽器版本?可以在地址欄輸入‘chrome://version/’,第一行就是版本信息。以小渣自己的瀏覽器為例,版本為76.0.3809.132(32位)。(補(bǔ)充,也可以在軟件通常都有的“關(guān)于”信息中找到)

Python Selenium如何爬取每日天氣

解壓下載文件,得到chromedriver.exe。作為一個新手教程,小渣不建議去設(shè)置什么復(fù)雜的環(huán)境變量,后續(xù)在使用chromedriver時用加絕對路徑引用就行。

二、Python+Selenium爬蟲

完成準(zhǔn)備工作之后就可以進(jìn)行爬蟲了。首先我們使用Selenium的瀏覽器驅(qū)動接口工具webdriver打開我們的爬取目標(biāo):中央氣象臺網(wǎng)站上的每日天氣圖。

代碼:

from selenium import webdriver  ## 導(dǎo)入selenium的瀏覽器驅(qū)動接口
chrome_driver = 路徑+'chromedriver.exe'  #chromedriver的文件位置
driver = webdriver.Chrome(executable_path = chrome_driver)          #加載瀏覽器驅(qū)動
driver.get('http://www.nmc.cn/publish/observations/china/dm/weatherchart-h000.htm')  #打開頁面

1、Selenium頁面元素定位

假設(shè)我們想下載500hPa高度的基本天氣分析圖,在平時我們會怎么做?肯定是在頁面上點(diǎn)擊500hPa,選擇基本天氣分析,然后對圖片右鍵另存為對不對?那么接下來我們就要借助Selenium對網(wǎng)頁進(jìn)行控制,爬取的過程也就是模擬上述一系列人為操作讓機(jī)器來自動執(zhí)行。

Selenium對網(wǎng)頁的控制是基于各種HTML結(jié)構(gòu)元素的,在使用過程中,對于網(wǎng)頁各類元素的定位是基礎(chǔ),只有準(zhǔn)確抓取到對應(yīng)元素才能進(jìn)行后續(xù)的自動化控制。

1.1 查看頁面元素

Selenium定位時會涉及到一點(diǎn)HTML基礎(chǔ)知識,但不懂也沒關(guān)系,我們有偷懶的辦法。利用chrome瀏覽器的開發(fā)者工具,在chrome瀏覽器中右鍵點(diǎn)擊-->檢查,我們可以輕松地查看應(yīng)的頁面元素。

舉個例子:我們移動鼠標(biāo)到層次500hPa,就可以自動定位到500hPa層級按鈕對應(yīng)的HTML元素了,查看到它的屬性,可以看到500hPa這個按鈕對應(yīng)的頁面元素是link文字。

Python Selenium如何爬取每日天氣

1.2 元素定位

元素查看完畢后,接著就要進(jìn)行元素定位,顧名思義就是要找到這個元素在網(wǎng)頁中的位置,這樣后續(xù)才能進(jìn)行精確的頁面控制。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模擬鼠標(biāo)操作

元素定位完成后,還需要模擬鼠標(biāo)進(jìn)行懸浮和單擊等操作來選擇和下載我們所需目標(biāo)圖片。Selenium給我們提供了一個類來處理這類事件——ActionChains。這里用到的2個操作是:

鼠標(biāo)懸浮操作:move_to_element ()

單擊鼠標(biāo)左鍵:click()

下面給出完整的實(shí)現(xiàn)腳本:

from selenium import webdriver  ## 導(dǎo)入selenium的瀏覽器驅(qū)動接口
from selenium.webdriver.common.action_chains import ActionChains
import time
import os

chrome_driver = 路徑+'chromedriver.exe'  #chromedriver的文件位置
driver = webdriver.Chrome(executable_path = chrome_driver)          #加載瀏覽器驅(qū)動
driver.get('http://www.nmc.cn/publish/observations/china/dm/weatherchart-h000.htm')  #打開頁面
# driver.maximize_window()
time.sleep(1)
#模擬鼠標(biāo)選擇高度層
button1=driver.find_element_by_link_text('500hPa')     #通過link文字精確定位元素
action = ActionChains(driver).move_to_element(button1) #鼠標(biāo)懸停在一個元素上
action.click(button1).perform()                        #鼠標(biāo)單擊
time.sleep(1)                                          #注意加等待時間,避免因速度太快而失敗
for p in range(1,3):    #下載昨日08點(diǎn)和20點(diǎn)的天氣圖
    str_p=str(p)
    #模擬鼠標(biāo)選擇時間
    button2=driver.find_element_by_id('plist')             #通過id精確定位元素
    action = ActionChains(driver).move_to_element(button2) #鼠標(biāo)懸停在一個元素上
    action.click(button2).perform()                        #鼠標(biāo)單擊
    time.sleep(1)
    Select(button2).select_by_index(str_p)                 #下拉菜單通過文本值定位從0開始
    time.sleep(1)
    #模擬鼠標(biāo)選擇圖片
    elem_pic = driver.find_element_by_id('imgpath')       #通過id精確定位元素
    action = ActionChains(driver).move_to_element(elem_pic)
    action.context_click(elem_pic).perform()              #鼠標(biāo)右擊
    filename= str(elem_pic.get_attribute('src')).split('/')[-1].split('?')[0]  #獲取文件名
    print(filename)
    time.sleep(1)

以上是“Python Selenium如何爬取每日天氣”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前名稱:PythonSelenium如何爬取每日天氣
瀏覽地址:http://muchs.cn/article10/pphcdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、用戶體驗(yàn)、建站公司、云服務(wù)器、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化