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中的文件与目录操作
Jul 11 Python
python批量修改文件编码格式的方法
May 31 Python
Flask框架通过Flask_login实现用户登录功能示例
Jul 17 Python
Python反射和内置方法重写操作详解
Aug 27 Python
Python正则表达式指南 推荐
Oct 09 Python
python 处理telnet返回的More,以及get想要的那个参数方法
Feb 14 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
pandas的qcut()方法详解
Jul 06 Python
python plt可视化——打印特殊符号和制作图例代码
Apr 17 Python
浅谈matplotlib中FigureCanvasXAgg的用法
Jun 16 Python
使用PyCharm安装pytest及requests的问题
Jul 31 Python
Python OpenGL基本配置方式
May 20 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列出一个目录下的所有文件的代码
2012/10/09 PHP
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
php环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
aspx中利用js实现确认删除代码
2010/07/22 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
2015/11/06 Javascript
Jquery跨浏览器文本复制插件Zero Clipboard的使用方法
2016/02/28 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
nodejs实现OAuth2.0授权服务认证
2017/12/27 NodeJs
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
微信小程序 腾讯地图显示偏差问题解决
2019/07/27 Javascript
JavaScript闭包相关知识解析
2019/10/19 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
Python常用列表数据结构小结
2014/08/06 Python
Python中实现常量(Const)功能
2015/01/28 Python
Python中设置变量访问权限的方法
2015/04/27 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
PyTorch 1.0 正式版已经发布了
2018/12/13 Python
Softmax函数原理及Python实现过程解析
2020/05/22 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
python 制作磁力搜索工具
2021/03/04 Python
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
澳大利亚最超值的自行车之家:Reid Cycles
2019/03/24 全球购物
成功经营餐厅的创业计划书范文
2013/12/26 职场文书
会计专业个人自我鉴定
2014/03/21 职场文书
我的中国梦口号
2014/06/16 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
《攀登者》:“海拔8000米以上,你不能指望任何人”
2019/11/25 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书
Jsonp劫持学习
2021/04/01 PHP