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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
Python中字符串的格式化方法小结
May 03 Python
python基础教程之分支、循环简单用法
Jun 16 Python
python函数的5种参数详解
Feb 24 Python
TensorFlow模型保存/载入的两种方法
Mar 08 Python
python2.6.6如何升级到python2.7.14
Apr 08 Python
python贪婪匹配以及多行匹配的实例讲解
Apr 19 Python
python中sys.argv函数精简概括
Jul 08 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
Jan 29 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 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
星际争霸秘籍
2020/03/04 星际争霸
set_include_path在win和linux下的区别
2008/01/10 PHP
PHP程序员编程注意事项
2008/04/10 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
javascript 写类方式之六
2009/07/05 Javascript
Javascript 实现TreeView CheckBox全选效果
2010/01/11 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
jQuery实现渐变下拉菜单的简单方法
2015/03/11 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
基于javascript实现随机颜色变化效果
2016/01/14 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
原生JS发送异步数据请求
2017/06/08 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
浅谈Webpack 持久化缓存实践
2018/03/22 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
js实现简单五子棋游戏
2020/05/28 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
如何卸载python插件
2020/07/08 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
酒店门卫岗位职责
2013/12/29 职场文书
经典促销广告词大全
2014/03/19 职场文书
股东合作协议书
2014/04/14 职场文书
商业项目策划方案
2014/06/05 职场文书
同学聚会策划方案
2014/06/06 职场文书
物业品质提升方案
2014/06/08 职场文书
会计求职自荐信
2014/06/20 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
酒店开业主持词
2015/07/02 职场文书
班级联欢会主持词
2015/07/03 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书