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中迭代器(iterator)用法实例分析
Apr 29 Python
Python实现二叉树结构与进行二叉树遍历的方法详解
May 24 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
Python迭代器和生成器定义与用法示例
Feb 10 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
如何优雅地处理Django中的favicon.ico图标详解
Jul 05 Python
python 读取文件并替换字段的实例
Jul 12 Python
Python pandas RFM模型应用实例详解
Nov 20 Python
使用遗传算法求二元函数的最小值
Feb 11 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
python实现QQ邮箱发送邮件
Mar 06 Python
浅谈Python数学建模之整数规划
Jun 23 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
WHOIS类的修改版
2006/10/09 PHP
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP批量去除BOM头代码分享
2015/06/26 PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
2020/08/17 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
2019/06/03 PHP
JS 常用校验函数
2009/03/26 Javascript
FF IE兼容性的修改小结
2009/09/02 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
编程语言JavaScript简介
2014/10/16 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
JS实现的四级密码强度检测功能示例
2017/05/11 Javascript
使用easyui从servlet传递json数据到前端页面的两种方法
2019/09/05 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
OpenLayer3自定义测量控件MeasureTool
2020/09/28 Javascript
Vue中的nextTick作用和几个简单的使用场景
2021/01/25 Vue.js
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
2019/08/07 Python
python中pdb模块实例用法
2021/01/15 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
纽约的奢华内衣店:Journelle
2016/07/29 全球购物
物业管理个人自我评价
2013/11/08 职场文书
司法助理专业自荐书
2014/06/13 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
优秀教师先进材料
2014/12/16 职场文书
检讨书范文500字
2015/01/28 职场文书
护士爱岗敬业心得体会
2016/01/25 职场文书
创业计划书之外语培训班
2019/11/02 职场文书
Python使用scapy模块发包收包
2021/05/07 Python