写了一个下载图片和视频的python小工具
zhezhongyun 2025-05-30 18:56 10 浏览
谁先掌握了 AI, 谁就掌握了未来的“权杖”。
在网上冲浪时,总会遇到一些好看的视频和图片,情不自禁地想“据为己有”。于是,就有了下载图片和视频的需求。
浏览器插件
工欲善其事,必先利其器。要做一件事,首先得找到对应的工具。下载网络图片或视频,当然首选浏览器插件了。
使用 Microsoft Edge Dev 版,安装如下插件即可(安装插件的方法网上搜下即可):
Python 小工具
「需求场景」
有了浏览器插件,为什么我还要写这个小工具呢?
我的需求场景是,有一个入口页面(如下图所示),这个页面有一系列子页面和链接,每个子页面有一个视频。我想批量下载这些子页面的视频。使用浏览器插件,我得一个个点击子页面,子页面比较多时,是个繁琐的事情。
能不能用程序来实现呢?说干就干。
「思路说明」
(1)使用 selenium 来模拟打开页面,因为有些页面需要完全打开,否则内容会获取不到或者获取不完整;
(2)使用元素选择器来定位网页链接元素和资源元素;
(3)元素选择器可以通过命令行指定,使用更加灵活方便;
(4)由于定位链接元素和资源元素都可以采用同一种办法,又不想再加一个选项去定位资源元素,因此这里复用了 -s 选项去定位资源元素。这块还得再想想。这个程序的重点就是如何准确定位链接和资源元素;
(5)视频下载使用了现有程序(Mac 上的 you-get),调用 shell 命令的方式来实现。因为通常不会下载太多的图片和视频,因此对性能没有作考虑。读者可以替换这个地方。
最基本的元素选择器:
选择器名称选择的内容示例ID 选择器具有特定 ID 的元素。单一 HTML 页面中,每个 ID 只对应一个元素,一个元素只对应一个 ID#my-id,选择 <p id="my-id"> 或 <a id="my-id">类选择器具有特定类的元素。单一页面中,一个类可以有多个实例.my-class,选择 <p class="my-class"> 和 <a class="my-class">属性选择器拥有特定属性的元素img[src],选择 <img src="myimage.png"> 但不是 <img>
「安装与用法」
用法和例子在程序里已经给出了。要使用这个工具,需要:
(1)安装如下 python 模块:
pip3 install selenium requests beautifulsoup4 Pillow
(2) 下载对应的 chromedriver ,chromedriver 与 chrome 的版本要保持对应。
# download corresponding version of chromedriver in https://chromedriver.chromium.org/downloads
# unzip and cp chromedriver to /usr/local/bin/ then chmod +x /usr/local/bin/chromedriver
「程序实现」
#!/usr/bin/python3
#_*_encoding:utf-8_*_
import os
import random
import string
import json
import time
import argparse
import traceback
import subprocess
import requests
from bs4 import BeautifulSoup
from PIL import Image
# 下载目录设置
save_path = '/Users/qinshu/Downloads'
img_width_threshold = 500
img_height_threshold = 500
def usage():
usage_info = '''
This program is used to batch download pictures or videos from specified url.
search and download pictures or videos from network url by specified rules.
// ...省去部分代码
print("number of links: %s" % len(links))
if len(links) > 0:
for link in links:
if sourcetype:
time.sleep(1)
download_source(link, sourcetype, css)
与 ChatAI 高效协作
这个程序的主要还是我写的,只是一些功能使用了 AI 给出的程序。实际上,这还不算一种高效的与 AI 协作的方式。
如何与 ChatAI 高效协作呢?一种简单的方式是,你问我答。但是,简单的提问,往往得不到理想的回答。读者不妨试试以下几种提问,看看 ChatAI 给出什么答案:
- 写一个 python 程序,下载页面 https://tu.heiguang.com/works/12_%E6%A3%AE%E7%B3%BB.html 中 class=tk_photo_img 的链接列表;
- 能够使用 -c 来指定 classname;
- 使用模块化的方式来编写这个程序;
- 使用 -k --keyword 来指定一个关键字,链接包含该关键字才输出;
- 写一个模块化的 python 程序,获取页面 https://tu.heiguang.com/works/12_%E6%A3%AE%E7%B3%BB.html 中 class=tk_photo_img 中的链接列表;可以使用 -c 来指定 classname, 使用 -k 来指定一个关键字,链接包含该关键字才输出;如果指定了 -t type ,则下载指定类型的资源。type 可以取 img 或 video;
- 写一个模块化的 python 程序,获取页面 https://tu.heiguang.com/works/12_%E6%A3%AE%E7%B3%BB.html 中 class=tk_photo_img 中的链接列表;可以使用 -c 来指定 classname, 使用 -k 来指定一个关键字,链接包含该关键字才输出;如果指定了 -t type ,则下载指定类型的资源。type 可以取 img 或 video,要求使用 selenium 来模拟打开页面并写成函数,获取链接也写成一个单独的函数,下载资源也写成单独的函数。
- 写一个模块化的 python 程序,获取页面 https://tu.heiguang.com/works/12_%E6%A3%AE%E7%B3%BB.html 中 class=tk_photo_img 中的链接列表。要求如下:
(1) 可以使用 -c 来指定 classname;
(2) 可以使用 -s 来指定 css 选择符;
(3) 可以使用 -a 来指定自定义属性;
(4) -c -s -a 可以自由组合;
(5) 使用 -k 来指定一个关键字,链接包含该关键字才输出;
(6) 如果指定了 -t type ,则下载指定类型的资源。type 可以取 img 或 video;
(7) 要求使用 selenium 来模拟打开页面并写成函数,获取链接也写成一个单独的函数,下载资源也写成单独的函数。
请直接给出完整程序。是不是体会到了出题者的乐趣?
AI 给出的程序如下:
import argparse
import os
import re
import requests
from bs4 import BeautifulSoup
from selenium import webdriver
def open_browser(url):
'''使用 selenium 打开指定页面,并返回 driver 对象'''
options = webdriver.ChromeOptions()
options.add_argument('--headless')
//省去部分代码...
for link in image_links:
if args.type:
if args.type == 'img' and link.endswith(('jpg', 'jpeg', 'gif', 'png')):
download_media(link, 'Image', args.output)
elif args.type == 'video' and link.endswith(('mp4', 'avi', 'wmv', 'flv')):
download_media(link, 'Video', args.output)
else:
download_media(link, 'Image', args.output)
if __name__ == '__main__':
main()
虽然 AI 写出的程序还需要“调教”一下,但是,—— 我写出程序花费了 4 个小时,而 AI 只花费了不到一分钟。要知道,我是有着十年开发经验的工程师啊!就算 python 不太熟练,这个倍数也不会少多少。
我似乎看到了程序员面临的一次可怕的危机和可贵的机遇。可怕的危机我就不说了。可贵的机遇在于,熟练的开发者,完全可能单人单周从零构建起一个应用。也就是说,创业的技术基础已经形成,程序员需要更多学习商业、运营、财务、心理学相关的知识和技能。
对于初入行业的程序员,我的忠告是:尽可能早地掌握使用 AI 来协作。如果能善用 AI 的力量,他的成长速度和工作效率可能是其他人的数倍之多。
相关推荐
- Angular UI组件库入门指南 - 如何安装和开始使用(一)
-
本文主要介绍如何安装和开始使用KendoUIforAngular。首先完成安装步骤。然后创建一个简单的应用程序,其中包含一些KendoUIforAngular组件,应用程序源代码可供您参考...
- SPSS22: 3.1.3 数据管理—复制数据属性
-
内容摘自《SPSS常用统计分析教程(SPSS22.0中英文版)(第4版)》3.1.3复制数据属性复制数据属性(CopyDataProperties)可用于建立相同调查问卷的空白数据集,或者复制其...
- 妙用Excel制作漂亮工整的工资条(excel表格中如何制作工资条)
-
工资条的制作方法并不难,但如何用Excel把工资条做得更美观、更有效率,可就要花费一点小心思了。许多人或许已经习惯了用工资明细表做员工工资统计并向上级汇报,将表中的条目慢慢复制粘贴然后打印给员工,这样...
- 如何运用EXCEL制作员工工资条,你造吗?
-
每个月工资发放之后,正规的公司应发给每个员工一个工资条。上面有员工当月工资的详细构成。但不能将工资明细表剪条发放,因为每个数字缺少对应项目,这就需要重新制作一张专门用来打印的工资条。作为劳动者,应该妥...
- 鸿蒙仓颉语言开发实战教程:实现商品分类页
-
今天继续为大家带来仓颉语言开发商城应用的实战教程,今天的内容是实现商品分类页。分类页面要在基本布局的基础上增加一些动态效果,比如点击状态的切换和两个列表容器的联动。下面为大家详细介绍。分类列表先来看左...
- 鸿蒙开发实战:一多开发之缩放布局
-
在HarmonyOS中,使用ArkTS语法进行自适应布局时,缩放布局是一种重要的布局方式。它允许组件根据外部容器的尺寸变化,按照预设的比例或权重调整自身的大小,从而确保在不同设备上都能呈现出良好的视觉...
- 基于WPF的电能质量检测系统上位机软件设计
-
郑恒持,蒋丁宇,卢兴泉,刘泊江(大连海事大学轮机工程学院,辽宁大连116026)摘要:电能质量直接影响着电力系统能否安全运行,为了能及时可靠地检测电能质量,采用全新的WindowsPresen...
- HarmonyOS实战:Tab顶部滑动悬停功能实现
-
前言日常开发过程中,遇到这种Scroll嵌套List列表滑动顶部悬停的场景十分常见,在鸿蒙开发时也正好实现了这个功能,本篇文章将带你一步步实现Tab顶部悬停的效果,建议点赞收藏!实现效果先...
- Axure教程:高级搜索(axure搜索功能怎么做)
-
在原型中,搜索是一个常见的交互设计。但不少同学因为技能不熟悉就没有做对应的交互效果。这篇文章,作者分享了设计搜索功能的整个流程,相信看完你也能做一个很牛逼的交互。高级搜索可以通过使用精确的关键词或短语...
- Excel小技巧: 如何设置自动列宽适应内容
-
我们在整理Excel表格的时候,通常会碰到单元格列宽混乱的情况(如下图所示),这会导致数据显示不完整或浪费空间导致打印不全,每次手动调整列宽都会费时费力,下面教你三个方法,让你一键设置自动列宽,适应单...
- 用好6个公式 Excel随意查询(excel中查询功能怎么用公式)
-
Excel表格一般会储存大量数据,我们可能不是每次都需要使用其中的所有数据,大部分时候只用到其中的一部分,所以数据查询功能就变得非常重要。为此,Excel本身也提供了多少查询方法,供我们使用。首先我们...
- 夏日PC消暑指南:机箱风道与风扇选择
-
进入六月以后北京的天气真是热得让人感觉喘不过气,大家天天打交道的笔记本和台式机更是连人都不如了,所谓热成狗真是一点也不夸张。年年大家在防暑抗高温这个问题上都是八仙过海各显神通,但是很多人光顾着自己凉快...
- Excel VBA必学技巧:用厘米设置单元格大小,办公效率翻倍
-
痛点:Excel默认单位太反人类!你是否经常遇到这些问题:-想设置精确的单元格尺寸,却只能用模糊的"字符宽度"和"磅值"?-设计打印报表时,毫米级的误差导致格式错乱...
- CSS小知识,分享14个你可能还未用上但又实用的CSS属性(下)
-
大家好,在上一篇文章里CSS小知识,分享14个你可能还未用上但又实用的CSS属性(上)我们一起学习了上半部分,这篇文章我们我们继续学习下半部分。八、CSSShakeEffect晃动效果CSS...
- 总结雅虎前端性能优化技巧(16条)(雅虎引擎还能用吗)
-
前言在日常开发中,有很多场景需要我们去做好前端优化,为了防止遗忘,加深记忆,今天参阅了一些资料以及自己的一些总结,梳理出来15条优化技巧。1.合并文件css、js合并,减少http请求数,每次http...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 教程 (33)
- HTML 简介 (35)
- HTML 实例/测验 (32)
- HTML 测验 (32)
- JavaScript 和 HTML DOM 参考手册 (32)
- HTML 拓展阅读 (30)
- HTML常用标签 (29)
- HTML文本框样式 (31)
- HTML滚动条样式 (34)
- HTML5 浏览器支持 (33)
- HTML5 新元素 (33)
- HTML5 WebSocket (30)
- HTML5 代码规范 (32)
- HTML5 标签 (717)
- HTML5 标签 (已废弃) (75)
- HTML5电子书 (32)
- HTML5开发工具 (34)
- HTML5小游戏源码 (34)
- HTML5模板下载 (30)
- HTTP 状态消息 (33)
- HTTP 方法:GET 对比 POST (33)
- 键盘快捷键 (35)
- 标签 (226)
- HTML button formtarget 属性 (30)
- CSS 水平对齐 (Horizontal Align) (30)