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 logging模块学习笔记
May 24 Python
深度剖析使用python抓取网页正文的源码
Jun 11 Python
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python学习笔记之解析json的方法分析
Apr 21 Python
Python构建XML树结构的方法示例
Jun 30 Python
对python 各种删除文件失败的处理方式分享
Apr 24 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
Jul 03 Python
python3发送邮件需要经过代理服务器的示例代码
Jul 25 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
Django def clean()函数对表单中的数据进行验证操作
Jul 09 Python
python 实现有道翻译功能
Feb 26 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实现分页的一个示例
2006/10/09 PHP
PHP利用Socket获取网站的SSL证书与公钥
2017/06/18 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
javascript 函数式编程
2007/08/16 Javascript
JS中==与===操作符的比较
2009/03/21 Javascript
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
详解Nodejs之npm&amp;package.json
2017/06/15 NodeJs
vue实现简易的双向数据绑定
2020/12/29 Vue.js
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
[07:01]DOTA2-DPC中国联赛正赛 Aster vs Magma 3月5日 赛后选手采访
2021/03/11 DOTA
Python中用函数作为返回值和实现闭包的教程
2015/04/27 Python
Python每天必学之bytes字节
2016/01/28 Python
判断网页编码的方法python版
2016/08/12 Python
python使用mysql数据库示例代码
2017/05/21 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
Python数据可视化之画图
2019/01/15 Python
python3 pygame实现接小球游戏
2019/05/14 Python
使用python实现飞机大战游戏
2020/03/23 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
PHP两种查询函数array/row的区别
2013/06/03 面试题
校园创业策划书
2014/01/14 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
初三学生评语大全
2014/04/24 职场文书
第二课堂活动总结
2014/05/07 职场文书
微电影大赛策划方案
2014/06/05 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书