小項目案例:實現批量下載網頁中的資源
根據15.3.2小節中的返回網頁內容可知,用戶只有獲取了網頁中的圖片url才可以將圖片下載到*在使用selenium庫渲染網頁后,可直接通過正則表達式過濾出指定的網頁圖片,從而實現批量下載接下來以此為思路來實現一個小項目案例。
項目任務
實現批量下載人民郵電出版社官網中與Python相關的圖書封面圖片。
項目實步驟
步驟1,獲取人民郵電出版社官網中與Python相關的圖書封面圖片url。使用get()方法即可獲取“python”的圖書封面圖片url。
步驟2,使用selenium庫驅動瀏覽器渲染網頁,并獲取染后的網頁代碼
步驟3,使用正則表達式過濾出圖片的ur1。
步驟4,使用15.3.2小節的返回網頁內容中的方法將對應ur1的圖片下載到本地
項目實現代碼
from selenium import webdriverfrom selenium,webdriver chrome,options import optionsimport requestsimport rechrome_options = Options ()chrome_options,binary_location = r"c:\program Files\Google\chrome\Application\chrome.exe"driver = webdriver.Chrome(options=chrome_options)driver.get('https://www.ptpress.com.cn/search?keyword=python')a = re.findall('<img src="(.+?jpg)"></div>',driver.page source)i=1for url in a:r = requests.get(url)f2 = open('.\\Python圖書\\'+str(i)+'.jpg','wb')i +=?1f2.write(r.content)f2.close()
第4~6行代碼綁定了Chrome瀏覽器,并驅動瀏覽器
第7行代碼使用get()方法打開Python類圖書的網頁,如圖15-36所示。
第8行代碼使用正則表達式過濾driver,page_source(渲染后的網頁代碼)中的圖片url。如圖15-36所示可以觀察到所有圖書封面圖片的標簽為<img>,圖片格式為.jpg,且下一個標簽為</div>。因此使用正則表達式設計的過濾規則為'<img src="(.+?jpg)"></div>’。過濾規則不是統一的,讀者可以自行設計過濾規則。第9~15行代碼使用requests庫中的get()方法將過濾出來的ur1分別保存到相對路徑“\Python圖書”下。執行代碼后將會自動下載網頁中的圖書封面圖片到本地文件夾“\Python圖書”中,如圖15-37所示。
此項目案例介紹了一個通用的下載網頁資源的方法,讀者掌握此方法后即可實現批量下載大部分網站中的圖片、音樂、視頻等資源文件。
獲取和操作網頁元素
獲取網頁中的指定元素
1獲取標簽中的圖片url使用了正則表達式的方式進行過濾,而WebDriver對象中也提供了大量用于獲取網頁指定元素的方法.
在獲取了網頁中的某個元素后,可以使用以下方法對此元素進行相應操作。
tag-name()方法:獲取元素的名稱。
text()方法:獲取元素的文本內容。
click()方法:單擊此元素。
submit()方法:提交表單。
send_keys()方法:模擬輸入信息。
size()方法:獲取元素的尺寸。
在元素中輸入信息
send_keys()方法可以實現在元素中輸入信息,例如在窗口標簽中輸入信息。其使用形式如下:
send keys(*value)
參數value:表示需要輸入的字符串信息。
示例代碼(在人民郵電出版社官網的搜索框中輸入“Python”):
from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.common.keys import Keyschrome options = Options()chrome options.binary location = r"c:\Program Files\Google\chrome\Application\chrome.exe"driver = webdriver.Chrome(options=chrome options)driver.get('https://www.ptpress.com.cn/')driver fnd element by tag name ("input").send keys ("Python" )
第8行代碼使用find_element_by_tag_name()方法找到標簽名為input的元素(通過網頁源代碼可知搜索框的標簽名為input)。獲取到標簽后使用send_keys()方法實現在搜索框內輸入字符串"Python"。
獲取元素的方法比較多,讀者可按照不同的方法靈活實現。實現在搜索框中輸入信息的代碼程序后,還可以模擬用戶的按鍵操作,其使用方法為在字符串后面繼續增加按鍵轉義字符串信息。
示例代碼:
from selenium import webdriverfrom selenium,webdriver,chrome.options import Optionsfrom selenium,webdriver,common.keys import Keyschrome options =Options()chrome_options.binary_location = r"C:\Program Files\Google\chrome\Application\chrome,exe"driver=webdriver.Chrome(options=chrome options)driver.get('https://www.ptpress.com.cn/')driver.find element by tag name("input").send keys ("Python"+ KeyS .RETURN)
示例代碼在上二示例代碼的基礎上只對第8行微了修改。第8行代碼在send_keys()方法電行KPyS.RETURN,KeyS RETURN表示技E中談值來源于第3行代碼導入的類Keys,類Kev建。能義了大部分按鍵的轉義字符串。下面展示ySpenium庫官方源代碼中對類Keys的定義,根據定*司知KeyS.RETURN的值為轉義字符串八ue006msend_keys()中寫入的字符串信息為"pythoue006"。
類Keys的定義:
Elass Keys (object):
非甘群Set of special keys codes.gn#
NULL = *\ue000'
CANCEL=\ue001'#^控制鍵
HELP =ue002'
BACKSPACE =\ue003'
BACK SPACE = BACKSPACE
TAB =\ue004'
CLEAR =\ue005'
RETURN =\ue006'ENTER =\ue007'
SHIFT =\ue008'LEFT SHIFT = SHIFTCONTROL =\ue009'LEFT CONTROL=CONTROLALT =\ue00a'LEFT ALT = ALTPAUSE =\ue00b'ESCAPE =\ue00cSPACE =\ue00d'PAGE UP=\ue00e'PAGE DOWN=\ue00f'亻狀到篚剁鈄滹會盹玀攤跑=\ue010'HOME =\ue011'LEFT =\ue012'ARROW LEFT = LEFTUp ='\ue013'ARROW UP = UPRIGHT =\ue014'ARROW RIGHT = RIGHTDOW =\1e015!INSERT =
DELETE = '\ue017
SEMICOLON =\ue018'
EQUALS =\ue019'
#數字鍵NUMPAD0 =\ue0la'
NUMPAD1 =\ue01b'
NUMPAD2=\ue0lc
NUMPAD3=\ue0ld'
NUMPAD4= \ue0le'
NUMPAD5\ue0lf
NUMPAD6'\ue020'三
NUMPAD7 =\ue021'
NUMPAD8=\ue022'
NUMPAD9 =\ue023'
MULTIPLY =\ue024
ADD =\ue025'
SEPARATOR =ue026
SUBTRACT =\ue027'
DECIMAL =\ue028
DIVIDE =\ue029
F1 =\ue031'#功能鍵
F2 =ue032'
F3 =\ue033'
F4=\ue034'
F5 =\ue035'
F6 = \ue036'
F7 =\ue037'
F8=\ue038'
F9=\ue039'
F10 =\ue03a'
F11 =\ue03b'
F12 =\ue03c'
META =\ue03d'
COMMAND=\ue03d'
小項目案例:實現上傳圖片
項目任務泰現在百度識圖官網中上傳一張圖片
項目實現代碼
from selenium import webdriver
from selentan wendrtyer chrome,options import optlons
chrome_options = options()
crome options binary_location = r"c:\program fileslGoogleichromevpplleationichrome.exe
driver = webdriver,chrome (options=chrome optint)
driver.get('百度識圖主頁的網址”
input element = driver.find element by _name('file,)
input element.send_keys(r":\書代碼\識圖,jP)