您好,登錄后才能下訂單哦!
背景
實現需求:批量下載聯想某型號的全部驅動程序。
一般在做網絡爬蟲的時候,都是保存網頁信息為主,或者下載單個文件。當涉及到多文件批量下載的時候,由于下載所需時間不定,下載的文件名不定,所以有一定的困難。
思路
參數配置
在涉及下載的時候,需要先對chromedriver
進行參數配置,設定默認下載目錄:
global base_path profile = { 'download.default_directory': base_path } chrome_options = webdriver.ChromeOptions() chrome_options.add_experimental_option('prefs', profile) driver = webdriver.Chrome(executable_path='../common/chromedriver', options=chrome_options) driver.implicitly_wait(10)
頁面分析
聯想官網上每個型號的驅動下載頁面如上圖所示,雖然前面有一個登陸的遮罩,但是實際上并不影響點擊。需要注意的是:
驅動列表,需要點擊才可以顯示具體的下載項目表格,否則可以找到對應元素但無法獲取正確的信息
driver_list.find_element_by_class_name('download-center_list_t_icon').click()
每個下載列表的表頭建議做跳過處理
if sub_list.find_element_by_class_name('download-center_usblist_td01').text == '驅動名稱': continue
下載處理
在頁面中,找到“普通下載”的元素,點擊即可下載。最終實現結果是我們希望根據網頁的列表進行重命名和重新歸檔到文件夾,但是我們會發現如下幾個問題:
在網上找了很久,也沒找到在下載時直接重命名的方法,所以最終選擇依次下載,當每次下載完成后進行重命名和歸檔,思路如下:
os
模塊,找到下載目錄中所有文件,并按創建時間排序,找到最新創建的文件.crdownload
(chrome),那么根據后綴來判斷是否已完成下載,未完成的話繼續等待待下載完成,將文件重命名并剪切到開始建立的歸檔目錄。這里需要注意的是,有些文件名中不能存在/
符號,否則會導致重命名失敗,需要做一下替換。
在后期測試的時候,發現還有幾個坑需要注意:
在查找最新創建的文件時,需要注意.DS_Store
文件的處理。(Mac系統,Windows則需要考慮thumbs.db
)
需要判斷一下最新創建的文件是否為文件夾,可以通過filter
函數來處理
最新文件的排序查找實現如下:
def sort_file(): # 排序文件 dir_link = base_path dir_lists = list(filter(check_file, os.listdir(dir_link))) if len(dir_lists) == 0: return '' else: dir_lists.sort(key=lambda fn: os.path.getmtime(dir_link + os.sep + fn)) return os.path.join(base_path, dir_lists[-1]) def check_file(filename): # 忽略系統文件 if filename == '.DS_Store' or filename == 'thumbs.db': return False global base_path # 排除文件夾 return os.path.isfile(os.path.join(base_path, filename))
總結
最終實現效果如下:
完整代碼參考:https://github.com/keejo125/web_scraping_and_data_analysis/tree/master/Lenovo
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。