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 13 Python
简单的抓取淘宝图片的Python爬虫
Dec 25 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python实现简单的获取图片爬虫功能示例
Jul 12 Python
Python实现利用163邮箱远程关电脑脚本
Feb 22 Python
Python操作Excel插入删除行的方法
Dec 10 Python
详解python数据结构和算法
Apr 18 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
Python concurrent.futures模块使用实例
Dec 24 Python
pandas的相关系数与协方差实例
Dec 27 Python
Python实现快速大文件比较代码解析
Sep 04 Python
PyTorch中的torch.cat简单介绍
Mar 17 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
php学习之变量的使用
2011/05/29 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
JavaScript中的6种运算符总结
2014/10/16 Javascript
轻松创建nodejs服务器(5):事件处理程序
2014/12/18 NodeJs
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
详解基于angular路由的requireJs按需加载js
2017/01/20 Javascript
socket.io学习教程之基本应用(二)
2017/04/29 Javascript
JavaScript 函数用法详解【函数定义、参数、绑定、作用域、闭包等】
2020/05/12 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
记录Django开发心得
2014/07/16 Python
python开发之list操作实例分析
2016/02/22 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
浅谈Tensorflow模型的保存与恢复加载
2018/04/26 Python
pandas.dataframe按行索引表达式选取方法
2018/10/30 Python
把pandas转换int型为str型的方法
2019/01/29 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
Python tkinter实现日期选择器
2021/02/22 Python
智乐游戏测试笔试题
2014/05/21 面试题
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
2014年新教师工作总结
2014/11/08 职场文书
旅游投诉信范文
2015/07/02 职场文书
反邪教教育心得体会
2016/01/15 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers