python+selenium+chrome批量文件下载并自动创建文件夹实例


Posted in Python onApril 27, 2020

实现效果:通过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批量文件下载并自动创建文件夹实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
python正则表达式之作业计算器
Mar 18 Python
python MysqlDb模块安装及其使用详解
Feb 23 Python
使用python爬虫获取黄金价格的核心代码
Jun 13 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
Appium+python自动化怎么查看程序所占端口号和IP
Jun 14 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
Aug 17 Python
python实现人脸签到系统
Apr 13 Python
通过自学python能找到工作吗
Jun 21 Python
django下创建多个app并设置urls方法
Aug 02 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
Oct 19 Python
python实现双人五子棋(终端版)
Dec 30 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
Apr 27 #Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 #Python
python读取yaml文件后修改写入本地实例
Apr 27 #Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 #Python
Python判断字符串是否为空和null方法实例
Apr 26 #Python
如何将PySpark导入Python的放实现(2种)
Apr 26 #Python
基于python实现对文件进行切分行
Apr 26 #Python
You might like
CURL的学习和应用(附多线程实现)
2013/06/03 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
利用“多说”制作留言板、评论系统
2015/07/14 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
javascript事件模型代码
2007/07/01 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
2013/01/09 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
zTree节点文字过多的处理方法
2017/11/24 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python实现k-means算法
2018/02/23 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
Python3 assert断言实现原理解析
2020/03/02 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
《可爱的动物》教学反思
2014/02/22 职场文书
广告语设计及教案
2014/03/21 职场文书
司法助理专业自荐书
2014/06/13 职场文书
吴仁宝观后感
2015/06/09 职场文书
盲山观后感
2015/06/11 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
导游词之四川熊猫基地
2020/01/13 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
2021/06/11 Python