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 04 Python
跟老齐学Python之变量和参数
Oct 10 Python
python基于右递归解决八皇后问题的方法
May 25 Python
Python实现类的创建与使用方法示例
Jul 25 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python3库numpy数组属性的查看方法
Apr 17 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
python命令 -u参数用法解析
Oct 24 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
python DES加密与解密及hex输出和bs64格式输出的实现代码
Apr 13 Python
彻底解决pip下载pytorch慢的问题方法
Mar 01 Python
Python实现我的世界小游戏源代码
Mar 02 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执行速度全攻略(上)
2006/10/09 PHP
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
探讨PHP使用eAccelerator的API开发详解
2013/06/09 PHP
PHP中常用的魔术方法
2017/04/28 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
Json实现异步请求提交评论无需跳转其他页面
2014/10/11 Javascript
Jquery Easyui进度条组件Progress使用详解(8)
2020/03/26 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
JavaScript观察者模式原理与用法实例详解
2020/03/10 Javascript
零基础写python爬虫之urllib2使用指南
2014/11/05 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python模块简介之有序字典(OrderedDict)
2016/12/01 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python如何访问字符串中的值
2020/02/09 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
pycharm激活码2020最新分享适用pycharm2020最新版亲测可用
2020/11/22 Python
利用html5 canvas动态画饼状图的示例代码
2018/04/02 HTML / CSS
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
Linux Interview Questions For software testers
2012/06/02 面试题
品质标语大全
2014/06/21 职场文书
公司年会开场白
2015/06/01 职场文书
公司的力量观后感
2015/06/05 职场文书
python神经网络ResNet50模型
2022/05/06 Python