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 10 Python
搭建Python的Django框架环境并建立和运行第一个App的教程
Jul 02 Python
浅谈Python Opencv中gamma变换的使用详解
Apr 02 Python
python线程池threadpool使用篇
Apr 27 Python
Python爬虫之正则表达式的使用教程详解
Oct 25 Python
对python当中不在本路径的py文件的引用详解
Dec 15 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Python关于OS文件目录处理的实例分享
May 23 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 Python
Python数据分析之pandas读取数据
Jun 02 Python
如何使用PyCharm及常用配置详解
Jun 03 Python
Python实现视频自动打码的示例代码
Apr 08 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学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
推荐dojo学习笔记
2007/03/24 Javascript
JQury slideToggle闪烁问题及解决办法
2011/07/05 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
jQuery中:last选择器用法实例
2014/12/30 Javascript
Javascript基础教程之变量
2015/01/18 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
javascript中的Function.prototye.bind
2015/06/25 Javascript
js ajaxfileupload.js上传报错的解决方法
2016/05/05 Javascript
js实现模糊匹配功能
2017/02/15 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
Vue实现数字输入框中分割手机号码的示例
2017/10/10 Javascript
对TypeScript库进行单元测试的方法
2019/07/18 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
Python函数返回值实例分析
2015/06/08 Python
Python的装饰器用法学习笔记
2016/06/24 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
Python while循环使用else语句代码实例
2020/02/07 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
《诚实与信任》教学反思
2014/04/10 职场文书
伊琍体标语
2014/06/25 职场文书
2014年医院十一国庆节活动方案
2014/09/15 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
培训简讯范文
2015/07/20 职场文书
公司业务员管理制度
2015/08/05 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
pytorch中的model=model.to(device)使用说明
2021/05/24 Python