您好,登錄后才能下訂單哦!
這篇文章主要講解了python+selenium+chrome如何實現批量文件下載并自動創建文件夾,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
實現效果:通過url所綁定的關鍵名創建目錄名,每次訪問一個網頁url后把文件下載下來
代碼:
其中 data[i][0]、data[i][1] 是代表 關鍵詞(文件保存目錄)、網站鏈接(要下載文件的網站)
def getDriverHttp(): for i in range(reCount): # 創建Chrome瀏覽器配置對象實例 chromeOptions = webdriver.ChromeOptions() # 設定下載文件的保存目錄為d盤的tudi目錄, # 如果該目錄不存在,將會自動創建 prefs = {"download.default_directory": "e:\\tudi\\{0}".format(data[i][0]), "profile.default_content_setting_values.automatic_downloads":1} # 將自定義設置添加到Chrome配置對象實例中 chromeOptions.add_experimental_option("prefs", prefs) # 啟動帶有自定義設置的Chrome瀏覽器 # driver = webdriver.Chrome(executable_path="e:\\chromedriver", chrome_options=chromeOptions) driver = webdriver.Chrome(chrome_options=chromeOptions) driver.get(data[i][1]) info2 = re.findall(r'<a href="#" rel="external nofollow" onclick="(.*?)" cssclass="xz_pic">', driver.page_source, re.S) print(len(info2)) for js in info2: driver.execute_script(js) def main(): getDriverHttp()
注意:python 使用selenium下載文件時,chrome會提示是否下載多個文件(Download multiple files)
prefs = {"download.default_directory": "e:\\tudi\\{0}".format(data[i][0]), "profile.default_content_setting_values.automatic_downloads":1}
設置允許多個文件下載。
補充知識:python項目實現配置統一管理的操作
一個比較大的項目總是會涉及到很多的參數,最好的方法就是在一個地方統一管理這些參數。最近看了不少的python項目,總結了兩種很有意思的配置管理方法。
第一種 基于easydict實現的配置管理
首先需要安裝numpy、easydict以及yaml:
pip install numpy
pip install easydict
pip install yaml
就可以了。
然后定義配置類config.py:
import numpy as np from easydict import EasyDict as edict import yaml # 創建dict __C = edict() cfg = __C # 定義配置dict __C.dev = edict() __C.dev.name = 'dev-xingoo' __C.dev.age = 20 __C.test = edict() __C.test.name = 'test-xingoo' __C.test.age = 30 # 內部方法,實現yaml配置文件到dict的合并 def _merge_a_into_b(a, b): """Merge config dictionary a into config dictionary b, clobbering the options in b whenever they are also specified in a. """ if type(a) is not edict: return for k, v in a.items(): # a must specify keys that are in b if k not in b: raise KeyError('{} is not a valid config key'.format(k)) # the types must match, too old_type = type(b[k]) if old_type is not type(v): if isinstance(b[k], np.ndarray): v = np.array(v, dtype=b[k].dtype) else: raise ValueError(('Type mismatch ({} vs. {}) ' 'for config key: {}').format(type(b[k]), type(v), k)) # recursively merge dicts if type(v) is edict: try: _merge_a_into_b(a[k], b[k]) except: print(('Error under config key: {}'.format(k))) raise else: b[k] = v # 自動加載yaml文件 def cfg_from_file(filename): """Load a config file and merge it into the default options.""" with open(filename, 'r', encoding='utf-8') as f: yaml_cfg = edict(yaml.load(f)) _merge_a_into_b(yaml_cfg, __C)
使用的時候很簡單,main.py:
from config import cfg_from_file from config import cfg cfg_from_file('config.yml') print(cfg.dev.name) print(cfg.test.name)
同級目錄下創建配置文件config.yaml
dev:
name: xingoo-from-yml
輸出:
xingoo-from-yml
test-xingoo
總結
這樣的好處就是在任何的Python文件中只要from config import cfg就可以使用配置文件。
第二種 基于Class實現
這種基于普通的python對象實現的,創建config2.py:
class Config: def __init__(self): self.name = 'xingoo-config2' self.age = 100
使用的時候直接創建一個新的對象,如何python模塊之間需要引用這個變量,那么需要把配置對象傳過去:
import config2 as config2 cfg2 = config2.Config() print(cfg2.name) print(cfg2.age)
輸出為:
xingoo-config2
100
總結
第二種方法簡單粗暴...不過每次傳遞參數也是很蛋疼。還是喜歡第一種方式。
看完上述內容,是不是對python+selenium+chrome如何實現批量文件下載并自動創建文件夾有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。