资讯专栏INFORMATION COLUMN

[Python自动化]selenium之文件批量下载

wzyplus / 2234人阅读

摘要:自动化这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。

Python 自动化 这一专栏,将以目的为导向,以简化或自动化完成工作任务为目标,将Python运用于实践中,解决实际问题,以激发读者对这门脚本语言的学习兴趣。在开始Python自动化相关实战的学习前,建议对 Python基础 以及 Python 爬虫 的相关知识展开一定的学习与了解。对此博客已开设相关专栏,可点击直达。


往期内容提要:


“文件下载”无论是在网络爬虫,还是自动化领域,都是最为常见的需求。此前作者曾在 《教务管理系统:成绩、课表查询接口设计及抢课、监控功能实现》 一文中,在图形验证码的识别中首先就介绍了进行了实战展示。在这一篇文章中,将对文件下载作出一个相对系统的概括与总结。

一般而言,文件下载可以通过两个方式实现。其一, 发包收包解决;其二,selenium解决。

针对第一种方法,曾在 《教务管理系统:成绩、课表查询接口设计及抢课、监控功能实现》 一文中予以过展示。基本逻辑在于构造get请求,发包后储存返回结果。

url = "手动打码/Image.aspx"def get_pic():    # 验证码请求头    headers = {        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0",        "cookie": "varPartNewsManage.aspx=10"    }    re_pic = requests.get(url, headers=headers)    response = re_pic.content    file = "C://Users//john//Desktop//1//" + ".png"    playFile = open(file, "wb")    playFile.write(response)    playFile.close()

此外,通过selenium方式解放双手,实现文件批量下载在实战中也是较为常见的方法。接下来将以网课梦魇——“超星学习通”课程音频下载为例,介绍如何利用selenium实现网课文件批量下载。


环境所需必要模块:
from selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditionsfrom selenium.common.exceptions import TimeoutException, WebDriverExceptionfrom datetime import datetimefrom time import sleepfrom selenium.webdriver.support.wait import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.common.by import By

文件下载基本步骤梳理:
  1. 访问目标站点
  2. 获取下载源
  3. 指定存储路径
  4. 实现下载

一、访问目标站点

目标站点的访问方法可参见往期Python自动化文章 《【Python自动化】登陆与识别》,而文章举例站点“超星学习通”的URL作为教师分享链接,无需登陆验证。URL格式如下:

http://apps.wh.chaoxing.com/screen/vclass/view/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx

因此,仅需要简单调用webdriver,实现目标站点的访问:

chrome_options = Options()# chrome_options.add_argument("--headless")# chrome_options.add_argument("--disable-gpu")driver = webdriver.Chrome()browser = webdriver.Chrome(chrome_options=chrome_options)url_list = [    "http://apps.wh.chaoxing.com/screen/vclass/view/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx1",    "http://apps.wh.chaoxing.com/screen/vclass/view/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx2",    "http://apps.wh.chaoxing.com/screen/vclass/view/xxxxx-xxxxx-xxxxx-xxxxx-xxxxxxxxxx3"]browser.get(url_list[0])# browser.maximize_window()wait = WebDriverWait(browser,10,0.5)

二、获取下载源


首先通过开发者模式定位音频元素,在能够获取单页音频文件直链的基础上,采用遍历的方式获取全站文件直链。

link = WebDriverWait(browser, 10).until(lambda x: x.find_elements_by_xpath("//audio"))list=[]list_count = 0for i in link:    list.append(i.get_attribute("src"))#print(list)#print(type(list))browser.quit()

三、指定存储路径并实现下载

z = []for i in list:    time = datetime.now().strftime("%H-%M-%S----")    data = requests.get(i, stream=True)    z.append(time)    with open("C://Users//john//Desktop//1//" + time + i[-8:-5] + ".mp3", "wb") as f:        for j in data.iter_content(chunk_size=512):            f.write(j)        print(i + "写出完毕!")print("一共 {} 个,下载完成 {} 个 ".format(len(list),len(z)))

其中存储文件的命名方式多样,这里选择时间戳的方式为音频排序:


至此,本文也就进入尾声了。本文的撰写来自于开发中的一点心得体会,主要目的在于通过实践提高读者Python学习兴趣,解决实际问题。供对这一领域感兴趣的读者以参考借鉴。希望本文能够起到抛砖引玉之效,也欢迎大家的批评交流。


如果您有任何疑问或者好的建议,期待你的留言、评论与关注!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121423.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 爬虫 + 动化利器 selenium 自学成才篇(二)

    摘要:耗时代码运行到这句之后触发隐式等待,在轮询检查后仍然没有定位到元素,抛出异常。耗时值得一提的是,对于定位不到元素的时候,从耗时方面隐式等待和强制等待没什么区别。 ...

    AWang 评论0 收藏0
  • Python+Selenium实现在Geoserver批量发布Mongo矢量数据

      小编写这篇文章的一个主要目的,主要是来给大家做一个解答,解答的内容是Python+Selenium,具体的一个内容解释是什么呢?比如,我们可以实现Geoserver批量发布Mongo矢量数据,具体的一个内容,下面就给大家详细解答下。  首先,声明一下,这里我完成的脚步属于半自动化的,我戏称它为有监督的半自动化脚本。具体原因后面会详细说明。  一、安装Selenium和ChromeDriver ...

    89542767 评论0 收藏0
  • 【小白+python+selenium库+图片爬取+反爬+资料】超详细新手实现(01)webdriv

    摘要:且本小白也亲身经历了整个从小白到爬虫初入门的过程,因此就斗胆在上开一个栏目,以我的图片爬虫全实现过程为例,以期用更简单清晰详尽的方式来帮助更多小白应对更大多数的爬虫实际问题。 前言: 一个月前,博主在学过python(一年前)、会一点网络(能按F12)的情况下,凭着热血和兴趣,开始了pyth...

    Half 评论0 收藏0
  • 爬虫 - 收藏集 - 掘金

    摘要:在这之前,还是有必要对一些概念超轻量级反爬虫方案后端掘金前言爬虫和反爬虫日益成为每家公司的标配系统。 爬虫修炼之道——从网页中提取结构化数据并保存(以爬取糗百文本板块所有糗事为例) - 后端 - 掘金欢迎大家关注我的专题:爬虫修炼之道 上篇 爬虫修炼之道——编写一个爬取多页面的网络爬虫主要讲解了如何使用python编写一个可以下载多页面的爬虫,如何将相对URL转为绝对URL,如何限速,...

    1fe1se 评论0 收藏0

发表评论

0条评论

wzyplus

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<