python+selenium+chrome批量文件下载并自动创建文件夹实例

作者:滑冰选手库里 时间:2022-09-14 09:56:42 

实现效果:通过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

总结

第二种方法简单粗暴...不过每次传递参数也是很蛋疼。还是喜欢第一种方式。

来源:https://blog.csdn.net/weixin_40096730/article/details/88978151

标签:python,selenium,chrome,文件,下载
0
投稿

猜你喜欢

  • BootStrap 表单控件之单选按钮水平排列

    2024-05-11 09:43:18
  • Django mysqlclient安装和使用详解

    2024-01-13 21:13:08
  • 客户端模板的应用

    2007-05-11 16:50:00
  • python 实现的截屏工具

    2023-05-15 00:20:39
  • python3 实现除法结果为整数

    2023-06-27 20:08:22
  • PL/SQL实现Oracle数据库任务调度

    2010-07-20 12:57:00
  • Flask框架运用Ajax实现数据交互的示例代码

    2023-11-19 19:15:19
  • 使用Python手工计算x的算数平方根,来自中国古人的数学智慧

    2021-12-07 01:29:53
  • python正则表达式常见的知识点汇总

    2023-10-02 18:56:21
  • 一篇文章彻底搞懂python正则表达式

    2021-02-10 13:16:19
  • pycharm 使用心得(二)设置字体大小

    2022-02-19 15:37:04
  • asp如何使用MsChart制图工具?

    2010-06-05 12:40:00
  • python画条形图实例

    2023-12-04 12:32:33
  • python是先运行metaclass还是先有类属性解析

    2022-02-10 23:24:48
  • Python创建或生成列表的操作方法

    2022-05-18 10:21:23
  • 在原窗口还是新窗口打开链接?

    2009-12-07 21:24:00
  • Pytorch 和 Tensorflow v1 兼容的环境搭建方法

    2022-04-05 12:19:06
  • python实操案例练习(八)

    2021-12-17 05:51:45
  • python tkinter界面居中显示的方法

    2023-10-14 11:16:18
  • 用数据库生成不重复的流水号

    2007-10-06 22:49:00
  • asp之家 网络编程 m.aspxhome.com