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比较两个列表是否相等的方法
Jul 28 Python
深入浅析ImageMagick命令执行漏洞
Oct 11 Python
python通过opencv实现批量剪切图片
Nov 13 Python
AI人工智能 Python实现人机对话
Nov 13 Python
TensorFlow实现Softmax回归模型
Mar 09 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
Django实现单用户登录的方法示例
Mar 28 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
python实现基于朴素贝叶斯的垃圾分类算法
Jul 09 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
django的model操作汇整详解
Jul 26 Python
Python使用pyecharts控件绘制图表
Jun 05 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
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
js正确获取元素样式详解
2009/08/07 Javascript
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
Nodejs Express4.x开发框架随手笔记
2015/11/23 NodeJs
jQuery隐藏和显示效果实现
2016/04/06 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
jQuery Validate插件自定义验证规则的方法
2016/12/27 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
2017/01/01 Javascript
Node.js学习入门
2017/01/03 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
vue+node 实现视频在线播放的实例代码
2020/10/19 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Django发送html邮件的方法
2015/05/26 Python
用python处理MS Word的实例讲解
2018/05/08 Python
python递归全排列实现方法
2018/08/18 Python
Python如何实现定时器功能
2020/05/28 Python
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
欧洲、亚洲、非洲和拉丁美洲的度假套餐:Great Value Vacations
2019/03/30 全球购物
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
电气技术员岗位职责
2013/11/19 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
大专护理专业自荐信
2015/03/25 职场文书
php引用传递
2021/04/01 PHP
vue backtop组件的实现完整代码
2021/04/07 Vue.js
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers