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 控制语句
Nov 03 Python
Python使用minidom读写xml的方法
Jun 03 Python
Windows系统下使用flup搭建Nginx和Python环境的方法
Dec 25 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
May 30 Python
python flask框架实现重定向功能示例
Jul 02 Python
python中必要的名词解释
Nov 20 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
Python爬虫获取页面所有URL链接过程详解
Jun 04 Python
python全栈开发语法总结
Nov 22 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 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 简单日历实现代码
2009/10/28 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
Array对象方法参考
2006/10/03 Javascript
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
jQuery实现的页面详情展开收起功能示例
2018/06/11 jQuery
React styled-components设置组件属性的方法
2018/08/07 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
python 文件与目录操作
2008/12/24 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
python简单读取大文件的方法
2016/07/01 Python
Python实现抢购IPhone手机
2018/02/07 Python
python如何修改装饰器中参数
2018/03/20 Python
Python3单行定义多个变量或赋值方法
2018/07/12 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
python 求定积分和不定积分示例
2019/11/20 Python
python实现在线翻译功能
2020/03/03 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
出纳岗位职责
2013/11/09 职场文书
电子商务专业个人的自我评价
2013/12/19 职场文书
大学生职业生涯规划范文
2014/01/08 职场文书
幼儿园圣诞节活动总结
2015/05/06 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
python3使用diagrams绘制架构图的步骤
2021/04/08 Python