python+selenium+chrome批量文件下載并自動(dòng)創(chuàng)建文件夾實(shí)例
實(shí)現(xiàn)效果:通過url所綁定的關(guān)鍵名創(chuàng)建目錄名,每次訪問一個(gè)網(wǎng)頁(yè)url后把文件下載下來
代碼:
其中 data[i][0]、data[i][1] 是代表 關(guān)鍵詞(文件保存目錄)、網(wǎng)站鏈接(要下載文件的網(wǎng)站)
def getDriverHttp(): for i in range(reCount): # 創(chuàng)建Chrome瀏覽器配置對(duì)象實(shí)例 chromeOptions = webdriver.ChromeOptions() # 設(shè)定下載文件的保存目錄為d盤的tudi目錄, # 如果該目錄不存在,將會(huì)自動(dòng)創(chuàng)建 prefs = {'download.default_directory': 'e:tudi{0}'.format(data[i][0]), 'profile.default_content_setting_values.automatic_downloads':1} # 將自定義設(shè)置添加到Chrome配置對(duì)象實(shí)例中 chromeOptions.add_experimental_option('prefs', prefs) # 啟動(dòng)帶有自定義設(shè)置的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='http://www.lshqa.cn/bcjs/4286.html#' 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下載文件時(shí),chrome會(huì)提示是否下載多個(gè)文件(Download multiple files)
prefs = {'download.default_directory': 'e:tudi{0}'.format(data[i][0]), 'profile.default_content_setting_values.automatic_downloads':1}
設(shè)置允許多個(gè)文件下載。
補(bǔ)充知識(shí):python項(xiàng)目實(shí)現(xiàn)配置統(tǒng)一管理的操作
一個(gè)比較大的項(xiàng)目總是會(huì)涉及到很多的參數(shù),最好的方法就是在一個(gè)地方統(tǒng)一管理這些參數(shù)。最近看了不少的python項(xiàng)目,總結(jié)了兩種很有意思的配置管理方法。
第一種 基于easydict實(shí)現(xiàn)的配置管理
首先需要安裝numpy、easydict以及yaml:
pip install numpy pip install easydictpip install yaml
就可以了。
然后定義配置類config.py:
import numpy as npfrom easydict import EasyDict as edictimport yaml # 創(chuàng)建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 # 內(nèi)部方法,實(shí)現(xiàn)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# 自動(dòng)加載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)
使用的時(shí)候很簡(jiǎn)單,main.py:
from config import cfg_from_filefrom config import cfg cfg_from_file(’config.yml’)print(cfg.dev.name)print(cfg.test.name)
同級(jí)目錄下創(chuàng)建配置文件config.yaml
dev:name: xingoo-from-yml
輸出:
xingoo-from-ymltest-xingoo
總結(jié)
這樣的好處就是在任何的Python文件中只要from config import cfg就可以使用配置文件。
第二種 基于Class實(shí)現(xiàn)
這種基于普通的python對(duì)象實(shí)現(xiàn)的,創(chuàng)建config2.py:
class Config: def __init__(self): self.name = ’xingoo-config2’ self.age = 100
使用的時(shí)候直接創(chuàng)建一個(gè)新的對(duì)象,如何python模塊之間需要引用這個(gè)變量,那么需要把配置對(duì)象傳過去:
import config2 as config2 cfg2 = config2.Config()print(cfg2.name)print(cfg2.age)
輸出為:
xingoo-config2100
總結(jié)
第二種方法簡(jiǎn)單粗暴...不過每次傳遞參數(shù)也是很蛋疼。還是喜歡第一種方式。
以上這篇python+selenium+chrome批量文件下載并自動(dòng)創(chuàng)建文件夾實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. ASP實(shí)現(xiàn)加法驗(yàn)證碼2. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向3. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法4. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說明5. CSS hack用法案例詳解6. ASP.NET MVC遍歷驗(yàn)證ModelState的錯(cuò)誤信息7. asp中response.write("中文")或者js中文亂碼問題8. PHP設(shè)計(jì)模式中工廠模式深入詳解9. jsp網(wǎng)頁(yè)實(shí)現(xiàn)貪吃蛇小游戲10. 用css截取字符的幾種方法詳解(css排版隱藏溢出文本)
