python实现网站中文件批量下载,实现在excel中超链接跳转打开下载的指定文件
前言
我们有的时候需要批量下载一个网站下的很多个页面的文件(例如附件等),并在excel中保存其相对路径,实现超链接单击打开。
这篇文章阐述了如何实现该过程,以及可能遇到的一些问题。
工具:pycharm,excel,mysql,navicat,chrome,chromedriver
语言:python
文件的批量下载
在这里,采用模拟浏览器的方式进行下载。如何模拟浏览器,就不再赘述,网上有很多教程(下载choreme,和对应版本的chormedriver,记得关闭杀毒软件,有些杀毒软件会拦截模拟浏览器)
在下载时,是自动保存到浏览器的默认路径的,如果想要对路径进行修改,可以在代码中增加相应的参数
# 下载文件到指定目录下
chromeOptions = webdriver.ChromeOptions()
# 这里的path替换为要保存的路径
prefs = { 'profile.default_content_settings.popups': 0, 'download.default_directory': 'path'}
chromeOptions.add_experimental_option("prefs", prefs)
# 这里的path为之前下载的chormedriver的路径
browser = webdriver.Chrome(executable_path=path, options=chromeOptions)
下载时就使用模拟浏览器的模拟点击功能,先确定点击的位置(通过F2进入开发者模式,复制XPATH或者css路径),使用click()模拟点击,就会直接下载到之前设置的路径里面。
# path为浏览器复制的xpath路径
browser.find_element_by_xpath("path").click()
注意事项:
1、注意设置浏览器关闭,避免下载网站过多,浏览器打开过多。
broswer.quit()
2、模拟浏览器时注意设置等待时间,不然有可能文件没有下载完,浏览器就已经关闭了。
import time
time.sleep(2)
根据你的需求,文件的大小,电脑的性能,网速等设置时间
数据库的保存与导出
文件下载之后需要实现超链接的点击,因此需要保存相应的文件名,保存到数据库中
这里我使用的是mysql,可视化工具使用的navicat
首先需要在navicat中新建表,并设计表的结构
# 插入数据库,table为新建的表名
# insert_sql为插入的sql语句
insert_sql = """ INSERT INTO table(id,路径) VALUES (%s,%s) """
# ip为连接数据库的地址,如果是本地就是"127.0.0.1"
# user为用户名,password为密码,db_name为数据库的名称
conn = MySQLdb.connect('ip', 'user', 'password', 'db_name', charset="utf8", use_unicode=True)
cur = conn.cursor()
cur.execute(insert_sql, (id,path))
conn.commit()
保存好之后就可以利用naviat将文件导出成excel格式
生成超链接
保存到excel之后,需要实现点击打开下载文件的超链接,我们将其批量实现。
首先,为了文件的可移植性,这里采用相对路径,因此先将excel表格保存到之前下载的目录下,这样对应得文件名就是其相对路径。
接下来使用excel的一个函数来实现批量超链接
// 在想要作为超链接那一列输入如下函数,a为对应的路径的单元格,b为超链接所显示的名字的单元格,
// 例如:=HYPERLINK(B2,E2),这个单元格显示的内容为E2所显示的内容,单机跳转打开的链接为B2单元格所显示的路径文件
=HYPERLINK(a,b)
然后将该单元格下拉,使一列都实现超链接就大功告成了
存在的问题(未完待续)
对于文件名字的获取,下次再说。主要有以下几个方面:
1、有的网页上会有文件的名字,直接利用xpath或者css定位就可以确定文件名
2、下载文件网页不包含名字的就需要对文件进行命名
3、有的网页即使存在文件名,也有可能和实际文件名并不相符,比如加号”+“变成了空格
对于2、3两个问题会有后续的解决方案。