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内置的字符串处理函数整理
Jan 29 Python
Python获取DLL和EXE文件版本号的方法
Mar 10 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
基于python的多进程共享变量正确打开方式
Apr 28 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
Python闭包装饰器使用方法汇总
Jun 29 Python
Python 使用 PyQt5 开发的关机小工具分享
Jul 16 Python
python能做哪些生活有趣的事情
Sep 09 Python
python urllib和urllib3知识点总结
Feb 08 Python
python非标准时间的转换
Jul 25 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
2016/07/21 PHP
PHP查询分页的实现代码
2017/06/09 PHP
Web开发者必备的12款超赞jQuery插件
2010/12/03 Javascript
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
AngularJS HTML编译器介绍
2014/12/06 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
Jquery ajax 同步阻塞引起的UI线程阻塞问题
2015/11/17 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
jQuery简单实现页面元素置顶时悬浮效果示例
2016/08/01 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
jQuery插件HighCharts绘制2D带Label的折线图效果示例【附demo源码下载】
2017/03/08 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
2018/07/25 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Vue 修改网站图标的方法
2020/12/31 Vue.js
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
Python图像处理之图片文字识别功能(OCR)
2019/07/30 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
Yummie官方网站:塑身衣和衣柜必需品
2019/10/29 全球购物
LUISAVIAROMA中国官网:时尚奢侈品牌购物网站
2020/11/01 全球购物
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
酒店管理专业学生求职信
2013/09/27 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
诚信承诺书范文
2014/03/27 职场文书
雨花台导游词
2015/02/06 职场文书
搭讪开场白台词大全
2015/05/28 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android