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实现的简单hangman游戏实例
Jun 28 Python
python的else子句使用指南
Feb 27 Python
python 基础教程之Map使用方法
Jan 17 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
Python应用库大全总结
May 30 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
django实现用户注册实例讲解
Oct 30 Python
python中删除某个元素的方法解析
Nov 05 Python
numpy按列连接两个维数不同的数组方式
Dec 06 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
Dec 11 Python
Python爬虫入门教程01之爬取豆瓣Top电影
Jan 24 Python
使用pandas模块实现数据的标准化操作
May 14 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中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php开启安全模式后禁用的函数集合
2011/06/26 PHP
Yii操作数据库实现动态获取表名的方法
2016/03/29 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
jquery text()要注意啦
2009/10/30 Javascript
js模仿jquery的写法示例代码
2013/06/16 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
js阻止冒泡及jquery阻止事件冒泡示例介绍
2013/11/19 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
Python 互换字典的键值对实例
2019/02/12 Python
Python实现线性插值和三次样条插值的示例代码
2019/11/13 Python
python 实现return返回多个值
2019/11/19 Python
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
便携式太阳能系统的创新者:GOAL ZERO
2018/02/04 全球购物
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
同程旅游英文网站:LY.com
2018/11/13 全球购物
英语专业学生个人求职信范文
2014/01/06 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
银行客户经理岗位职责
2015/04/09 职场文书
2016国庆节67周年红领巾广播稿
2015/12/18 职场文书
提取视频中的音频 Python只需要三行代码!
2021/05/10 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python