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中使用SQLite的简单教程
Apr 29 Python
Python中转换角度为弧度的radians()方法
May 18 Python
python实现日常记账本小程序
Mar 10 Python
python中字符串内置函数的用法总结
Sep 13 Python
Python+OpenCV+pyQt5录制双目摄像头视频的实例
Jun 28 Python
python批量处理文件或文件夹
Jul 28 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
python通过移动端访问查看电脑界面
Jan 06 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
python全栈开发语法总结
Nov 22 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 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
多数据表共用一个页的新闻发布
2006/10/09 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
ImageFlow可鼠标控制图片滚动
2008/01/30 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
使用base64对图片的二进制进行编码并用ajax进行显示
2017/01/03 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
微信小程序单选radio及多选checkbox按钮用法示例
2019/04/30 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
vue 实现LED数字时钟效果(开箱即用)
2019/12/08 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
使用wxPython获取系统剪贴板中的数据的教程
2015/05/06 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Python 统计字数的思路详解
2018/05/08 Python
python利用微信公众号实现报警功能
2018/06/10 Python
python之文件读取一行一行的方法
2018/07/12 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
TensorFlow内存管理bfc算法实例
2020/02/03 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
某公司面试题
2012/03/05 面试题
校本教研工作制度
2014/01/22 职场文书
雷人标语集锦
2014/06/19 职场文书
机电一体化专业求职信
2014/07/22 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
导游词之湖北武当山
2019/09/23 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
vue+elementUI实现表格列的显示与隐藏
2022/04/13 Vue.js