python使用selenium实现批量文件下载


Posted in Python onMarch 11, 2019

背景

实现需求:批量下载联想某型号的全部驱动程序。

一般在做网络爬虫的时候,都是保存网页信息为主,或者下载单个文件。当涉及到多文件批量下载的时候,由于下载所需时间不定,下载的文件名不定,所以有一定的困难。

思路

参数配置

在涉及下载的时候,需要先对chromedriver进行参数配置,设定默认下载目录:

global base_path
profile = {
  'download.default_directory': base_path
}
chrome_options = webdriver.ChromeOptions()
chrome_options.add_experimental_option('prefs', profile)
driver = webdriver.Chrome(executable_path='../common/chromedriver', options=chrome_options)
driver.implicitly_wait(10)

页面分析

python使用selenium实现批量文件下载

联想官网上每个型号的驱动下载页面如上图所示,虽然前面有一个登陆的遮罩,但是实际上并不影响点击。需要注意的是:

驱动列表,需要点击才可以显示具体的下载项目表格,否则可以找到对应元素但无法获取正确的信息

driver_list.find_element_by_class_name('download-center_list_t_icon').click()

每个下载列表的表头建议做跳过处理

if sub_list.find_element_by_class_name('download-center_usblist_td01').text == '驱动名称':
  continue

下载处理

在页面中,找到“普通下载”的元素,点击即可下载。最终实现结果是我们希望根据网页的列表进行重命名和重新归档到文件夹,但是我们会发现如下几个问题:

  • 下载过来的文件名无法控制。
  • 依次下载的话,我们无法确认需要下载多久。并行下载的话,无法有效的区分重命名。

在网上找了很久,也没找到在下载时直接重命名的方法,所以最终选择依次下载,当每次下载完成后进行重命名和归档,思路如下:

  • 对每个驱动目录,先新建一个文件夹,如:主板
  • 点击下载后开始下载文件
  • 通过os模块,找到下载目录中所有文件,并按创建时间排序,找到最新创建的文件
  • 由于未完成的文件后缀为.crdownload(chrome),那么根据后缀来判断是否已完成下载,未完成的话继续等待

python使用selenium实现批量文件下载

待下载完成,将文件重命名并剪切到开始建立的归档目录。这里需要注意的是,有些文件名中不能存在/符号,否则会导致重命名失败,需要做一下替换。

在后期测试的时候,发现还有几个坑需要注意:

在查找最新创建的文件时,需要注意.DS_Store文件的处理。(Mac系统,Windows则需要考虑thumbs.db

需要判断一下最新创建的文件是否为文件夹,可以通过filter函数来处理

最新文件的排序查找实现如下:

def sort_file():
 # 排序文件
 dir_link = base_path
 dir_lists = list(filter(check_file, os.listdir(dir_link)))
 if len(dir_lists) == 0:
   return ''
 else:
   dir_lists.sort(key=lambda fn: os.path.getmtime(dir_link + os.sep + fn))
   return os.path.join(base_path, dir_lists[-1])


def check_file(filename):
 # 忽略系统文件
 if filename == '.DS_Store' or filename == 'thumbs.db':
   return False
 global base_path
 # 排除文件夹
 return os.path.isfile(os.path.join(base_path, filename))

总结

最终实现效果如下:

python使用selenium实现批量文件下载

完整代码参考:https://github.com/keejo125/web_scraping_and_data_analysis/tree/master/Lenovo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中使用enumerate函数遍历元素实例
Jun 16 Python
在Python操作时间和日期之asctime()方法的使用
May 22 Python
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
python实现微信发送邮件关闭电脑功能
Feb 22 Python
对Python3中的input函数详解
Apr 22 Python
Python3基于sax解析xml操作示例
May 22 Python
浅谈django orm 优化
Aug 18 Python
利用Python模拟登录pastebin.com的实现方法
Jul 12 Python
Python在Matplotlib图中显示中文字体的操作方法
Jul 29 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
Mar 01 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
利用Python实现微信找房机器人实例教程
Mar 10 #Python
谈谈Python中的while循环语句
Mar 10 #Python
15行Python代码实现网易云热门歌单实例教程
Mar 10 #Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 #Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 #Python
Python高级特性与几种函数的讲解
Mar 08 #Python
Python I/O与进程的详细讲解
Mar 08 #Python
You might like
杏林同学录(一)
2006/10/09 PHP
FirePHP 推荐一款PHP调试工具
2011/04/23 PHP
php json_encode奇怪问题说明
2011/09/27 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
JavaScript之编码规范 推荐
2012/05/23 Javascript
jQuery晃动层特效实现方法
2015/03/09 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
nodejs+express搭建多人聊天室步骤
2018/02/12 NodeJs
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
python连接sql server乱码的解决方法
2013/01/28 Python
Python中的urllib模块使用详解
2015/07/07 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
使用python模拟命令行终端的示例
2019/08/13 Python
Python学习笔记之For循环用法详解
2019/08/14 Python
python3.6、opencv安装环境搭建过程(图文教程)
2019/11/05 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
python可以用哪些数据库
2020/06/22 Python
通过实例了解Python异常处理机制底层实现
2020/07/23 Python
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
护士见习期自我鉴定
2014/02/08 职场文书
会计工作决心书
2014/03/11 职场文书
财产保全担保书
2015/01/20 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python