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模拟鼠标拖动操作的方法
Mar 11 Python
用Python中的wxPython实现最基本的浏览器功能
Apr 14 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python内置函数delattr的具体用法
Nov 23 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
用python生成1000个txt文件的方法
Oct 25 Python
python实现字符串加密成纯数字
Mar 19 Python
Django发送邮件功能实例详解
Sep 02 Python
win10安装tesserocr配置 Python使用tesserocr识别字母数字验证码
Jan 16 Python
python神经网络编程之手写数字识别
May 08 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 Python
Python使用openpyxl模块处理Excel文件
Jun 05 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
destoon数据库表说明汇总
2014/07/15 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
ext监听事件方法[初级篇]
2008/04/27 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
Redis基本知识、安装、部署、配置笔记
2015/03/05 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
jQuery实现 RadioButton做必选校验功能
2017/06/15 jQuery
vue.js的状态管理vuex中store的使用详解
2019/11/08 Javascript
微信小程序返回上一页传参并刷新过程解析
2019/12/13 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
[01:19]2014DOTA2国际邀请赛 采访TITAN战队ohaiyo 能赢DK很幸运
2014/07/12 DOTA
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python实现随机漫步功能
2018/07/09 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python实现的对本地host127.0.0.1主机进行扫描端口功能示例
2019/02/15 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
python解析xml简单示例
2019/06/21 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
Python socket非阻塞模块应用示例
2019/09/12 Python
pytorch 修改预训练model实例
2020/01/18 Python
Django Session和Cookie分别实现记住用户登录状态操作
2020/07/02 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
HTML5本地数据库基础操作详解
2016/04/26 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
乐高瑞士官方商店:LEGO CH
2020/08/16 全球购物
大学生优秀班干部事迹材料
2014/05/26 职场文书
毕业生找工作求职信
2014/08/05 职场文书
债务纠纷委托书
2014/08/30 职场文书
公司委托书范本5篇
2014/09/20 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
大国崛起日本观后感
2015/06/02 职场文书