从 google 搜索下载前 1000 张图片

2023-11-22

我对谷歌图片进行了一些搜索

结果是数千张照片。我正在寻找一个可以下载第一个的 shell 脚本n图像,例如 1000 或 500。

我怎样才能做到这一点 ?

我想我需要一些高级的正则表达式或类似的东西。我尝试了很多方法但都无济于事,有人可以帮助我吗?


更新4:PhantomJS 现在已经过时了,我使用 Selenium 和 Chrome headless 在 Python 中制作了一个新脚本 google-images.py。请参阅此处了解更多详细信息:https://stackoverflow.com/a/61982397/218294

更新3:我修复了脚本以与 phantomjs 2.x 一起使用。

更新2:我修改了脚本以使用 phantomjs。安装起来比较困难,但至少它又可以工作了。http://sam.nipl.net/b/google-images http://sam.nipl.net/b/google-images.js

更新1:不幸的是,这不再有效。看来现在需要 JavaScript 和其他魔法来找到图像所在的位置。这是雅虎图像搜索脚本的一个版本:http://sam.nipl.net/code/nipl-tools/bin/yimg

原答案:我为此拼凑了一些东西。我通常会编写较小的工具并将它们一起使用,但您要求一个 shell 脚本,而不是三打。这是故意密集的代码。

http://sam.nipl.net/code/nipl-tools/bin/google-images

到目前为止似乎效果很好。如果您可以改进它,或者建议任何更好的编码技术(假设它是一个 shell 脚本),请告诉我。

#!/bin/bash
[ $# = 0 ] && { prog=`basename "$0"`;
echo >&2 "usage: $prog query count parallel safe opts timeout tries agent1 agent2
e.g. : $prog ostrich
       $prog nipl 100 20 on isz:l,itp:clipart 5 10"; exit 2; }
query=$1 count=${2:-20} parallel=${3:-10} safe=$4 opts=$5 timeout=${6:-10} tries=${7:-2}
agent1=${8:-Mozilla/5.0} agent2=${9:-Googlebot-Image/1.0}
query_esc=`perl -e 'use URI::Escape; print uri_escape($ARGV[0]);' "$query"`
dir=`echo "$query_esc" | sed 's/%20/-/g'`; mkdir "$dir" || exit 2; cd "$dir"
url="http://www.google.com/search?tbm=isch&safe=$safe&tbs=$opts&q=$query_esc" procs=0
echo >.URL "$url" ; for A; do echo >>.args "$A"; done
htmlsplit() { tr '\n\r \t' ' ' | sed 's/</\n</g; s/>/>\n/g; s/\n *\n/\n/g; s/^ *\n//; s/ $//;'; }
for start in `seq 0 20 $[$count-1]`; do
wget -U"$agent1" -T"$timeout" --tries="$tries" -O- "$url&start=$start" | htmlsplit
done | perl -ne 'use HTML::Entities; /^<a .*?href="(.*?)"/ and print decode_entities($1), "\n";' | grep '/imgres?' |
perl -ne 'use URI::Escape; ($img, $ref) = map { uri_unescape($_) } /imgurl=(.*?)&imgrefurl=(.*?)&/;
$ext = $img; for ($ext) { s,.*[/.],,; s/[^a-z0-9].*//i; $_ ||= "img"; }
$save = sprintf("%04d.$ext", ++$i); print join("\t", $save, $img, $ref), "\n";' |
tee -a .images.tsv |
while IFS=$'\t' read -r save img ref; do
wget -U"$agent2" -T"$timeout" --tries="$tries" --referer="$ref" -O "$save" "$img" || rm "$save" &
procs=$[$procs + 1]; [ $procs = $parallel ] && { wait; procs=0; }
done ; wait

特征:

  • 小于 1500 字节
  • 解释用法(如果不带参数运行)
  • 并行下载完整图像
  • 安全搜索选项
  • 图像大小、类型等 opts 字符串
  • 超时/重试选项
  • 冒充googlebot获取所有图片
  • 数字图像文件
  • 保存元数据

我将在某个时候发布一个模块化版本,以表明使用一组 shell 脚本和简单的工具可以很好地完成它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 google 搜索下载前 1000 张图片 的相关文章

  • 如何在 Mac OS X 中通过给出进程名称来获取进程的 PID?

    我正在编写一个脚本来监视任何给定进程的 CPU 和 MEM 为此 我需要将要监视的进程的名称作为命令行参数发送 例如 monitorscript
  • 可以在正则表达式的模式部分使用反向引用吗?

    有没有办法在正则表达式模式中反向引用 输入字符串示例 Here is some quoted text 假设我想提取引用的文本 我可以创建以下表达式 这个正则表达式会匹配some quoted 假设我希望它也支持单引号 我可以将表达式更改为
  • 如何提高图像质量? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在制作一个读取身份证的 OCR 使用 YOLO 获取感兴趣的区域后 我将裁剪后的区域交给 Tesseract 来读取它 由于这些裁
  • 在vb.net中将base64解码为图像

    我一直在互联网上搜索 但没有找到答案 你想告诉我如何解码base64 to be Image像折线图一样 我一直在尝试从base64 to Byte首先数组并从Byte数组到Image Private Function convertbyt
  • 压缩图像使其小于 4KB

    我有一个人的图像 我想将其压缩以使其小于 4KB 我需要对其进行压缩 并且即使图像缩小 仍然可以识别人的脸部 这是特蕾莎 梅 Theresa May 142kB 并调整大小为 72x72 并转换为灰度并减少到 2kB图像魔术师在命令行 co
  • 绘制圆圈(使用 for 循环在图像中应用的像素)

    我想使用像素位置 从左上角开始到右下角结束 绘制一个圆 带有 1 或 2 个 for 循环 我用这个方法成功绘制了一个矩形 private void drawrect int width int height int x int y int
  • 使用高级正则表达式在java中分割字符串

    我正在尝试在java中使用String split 将整个文档拆分为子字符串 制表符空格和换行符 但我想排除引号之间存在单词的情况 Example 这个文件 CATEGORYTYPE1 CATEGORYSUBTYPE1 OPTION1 AB
  • 正则表达式查找 bcrypt 哈希值?

    我正在寻找使用正则表达式 在 PowerGrep 中 在数据库中查找 bcrypt 哈希字符串 尝试了这个正则表达式 A Za z 0 9 60 但没有找到匹配项 Bcrypt 哈希长度为 60 个字符 以 2y 开头 Example 2y
  • 将存储在变量中的正则表达式与量词组合的正确语法是什么?

    我知道堆栈溢出中已经有很多关于在正则表达式中使用变量的问题 并且如果变量是一个单词 或者只需要匹配一次 我设法使其工作 但是 一旦我添加特殊字符 空格和量词 我就无法让它匹配 例如 我想匹配中的任何内容some var任何包含它的 3 个连
  • 正则表达式 在 Coldfusion 中匹配整个单词字符串

    我正在尝试这个例子 第一个例子 keyword star myString The dog sniffed at the star fish and growled regEx b keyword b if reFindNoCase reg
  • 在 JavaScript 中查找内容是否具有当前网站 url

    我正在使用 TinyMCE 作为编辑器 我想执行移动验证和 URL 验证 什么是不允许的 描述中不允许输入手机号码 仅允许在描述框中输入相同的应用程序 URL 如果用户输入其他网站网址 则会引发验证错误 我使用下面的代码来验证移动设备和 u
  • C# - 将 WPF Image.source 转换为 System.Drawing.Bitmap

    我发现很多人都在转换BitmapSource to a Bitmap 但是关于ImageSource to Bitmap 我正在制作一个成像程序 我需要从显示的图像中提取位图Image元素 有谁知道如何做到这一点 EDIT 1 这是一个用于
  • 为什么 Javascript 不支持lookbehind断言?

    最近我意识到 因有些尴尬 正则表达式lookbehind assertions were not可能在Javascript 这种看似常见的断言不存在的 事实 原因是什么 我意识到也许有其他方法可以实现同样的目标 https stackove
  • 在android上使用正则表达式验证字符串

    我希望我的字符串不包含 and 我用这个代码 private static boolean IsMatch String s String pattern try Pattern patt Pattern compile pattern M
  • 使用正则表达式检查至少 8 位数字的字符串

    我的正则表达式如下 d s 12 这将允许数字 空格 但我想确保字符串至少包含 8 位数字 一些允许的字符串如下 1323 24 233 24243434 43 43435 4554345 434 它不应该允许这样的字符串 1213 232
  • 如何将字符串转换为正则表达式文字

    逃避任意的最好方法是什么std wstring在正则表达式中使用 例如 转换you owe me to you owe me 我的场景 我想使用std tr1 wregex搜索整个单词 所以我想做一些类似的事情 std wstring Re
  • 保存 Lisp 状态

    我是 lisp 的初学者 有一个问题 当我直接在 REPL 中编写一些代码 没有任何 lisp 文件 时 如何保存解释器的工作 状态以便下次恢复并继续工作 我用的是ECL 谢谢 抱歉我蹩脚的英语 来自电化学发光手册 http ecls so
  • 目录中每个文件的循环代码[重复]

    这个问题在这里已经有答案了 我有一个图片目录 我想循环遍历并对其进行一些文件计算 这可能只是睡眠不足 但我如何使用 PHP 来查找给定的目录 并使用某种 for 循环遍历每个文件 Thanks scandir http php net sc
  • c - 后台运行的程序的退出状态

    我有一个任务 其中我必须创建一个迷你 shell 它能够执行很多操作 包括作业控制 我设法使用 fork 和 execvp 创建新的工作 但我还想获取 execvp 运行的程序的退出代码 根据我从其他帖子中查找到的内容 我可以使用以下方法来
  • 如何裁剪 JavaFX 图像并调整其大小?

    我正在尝试在 JavaFX 画布上显示非常大的图像 单张图像的分辨率为11980x8365 每个图像都有一个相应的世界文件 我可以使用它来正确定位图像 我的画布尺寸是 800x600 有时我需要在画布上写下整个图像 有时只是其中的一部分 这

随机推荐

  • ggplot 图例不适用于scale_colour_manual

    我知道之前已经有人问过同样的问题 ggplot 图例 scale colour manual 不起作用 但问题涉及的数据集比我这里的数据集稍微复杂 答案建议重组数据 然后使用重组数据 但即使使用下面的简单数据 问题仍然存在 我无法解决它 因
  • 将图像从 FileReader 传递到 Angular 6 中的表单输入

    我尝试创建一个用户界面 其中有一个带有几个文本字段的表单 一个input type file and a div您可以将图像与表单的其余部分一起上传 我的目标 逻辑 使用相同的div放置图像或单击它并打开文件夹资源管理器 例如input t
  • EF Code First,将两个导航属性映射到同一对象类型

    如果我有一个User具有以下属性的类 public Guid UserPreferenceId get set public virtual DefaultUserPreference UserPreference get set publ
  • Android 静态 Application.getInstance()

    你能帮我解决这个情况吗 我们正在使用一个类的静态实例 该类扩展了 android 中的 Application public class MyClass extends Application public static MyClass g
  • 成员名称和构造函数参数名称之间的冲突[重复]

    这个问题在这里已经有答案了 可能的重复 C 中的成员与方法参数访问 我有一个班级 有一些成员 比如x y width and height 在它的构造函数中 我不会这样做 A A int x int y int width int heig
  • 如何在单独的文件夹中添加资源?

    当我尝试通过单击 添加现有项目 在资源设计器中添加资源时 该项目被放置在 资源 文件夹中 问题是 如果我在资源目录中创建一个新目录并将资源放在那里 我会收到编译器错误 无法找到文件 我无法将所有资源放在一个文件夹中 因为我必须添加 2500
  • C# 中的 Struct.Pack 等效吗?

    我正在构建一个连接到渲染应用程序的 C 客户端 但失败了 我通过剖析一个适用于这一行的Python客户端来缩小问题范围 def Startclient Click self sender e try s socket socket sock
  • Linux 中的 Java - root 和非 root 的不同外观类

    我注意到 Java 为 root 和非 root 用户提供了不同的外观类 我试图了解如何使 LAF 保持一致 此外 即使在用户 root 内也是不一致的 取决于用户 root 的登录方式 示例代码 编译并打包在laf jar import
  • 使用decimal.ToString("C") 和 CultureInfo 自定义货币符号和小数位

    我有一个问题decimal ToString C 覆盖 基本上我想做的是如下 CultureInfo usCulture new CultureInfo en US Thread CurrentThread CurrentCulture u
  • 远程远程端点 RDFLib / Redland 上的 SPARQL 查询

    我正在尝试查询远程端点并获取 owl sameAs 映射 我尝试了 RDFLib 和 Redland 但都不适合我 可能我没有正确处理名称空间 这是我在 RDFLib 中的尝试 import rdflib rdflib plugin reg
  • 静态方法中的 findViewById

    我有这个静态方法 public static void displayLevelUp int level Context context LayoutInflater inflater LayoutInflater context getS
  • 非阻塞文件读取

    如何以非阻塞模式读取二进制或文本文件的内容 对于二进制文件 当我open filename mode rb 我得到一个实例io BufferedReader 文档堡垒io BufferedReader read says 读取并返回 siz
  • 理解“finally”块

    我编写了七个测试用例来理解finally堵塞 背后的逻辑是什么finally works package core public class Test public static void main String args new Test
  • Zend 框架:元属性集成

    我正在尝试根据页面内容将一些元 采用以下格式 添加到页面的头部 使用headMeta gt appendName像这样 this gt view gt headMeta gt appendName og title some content
  • Huggingface 转换器模型返回字符串而不是 logits

    我正在尝试从 Huggingface 网站运行这个示例 https huggingface co transformers task summary html 模型似乎返回两个字符串而不是 logits 这会导致 torch argmax
  • 如何更新cosmos db中的子文档

    我是 Cosmos Db 的新手 想了解如何删除 更新插入文档集合中的子文档 如果我有一个文件 Id 1234 Name foo Items Id abcd Age 35 Claims Name email Value email prot
  • 使用 ftplib 连接到 FTP TLS 1.2 服务器

    我尝试连接到仅支持 TLS 1 2 的 FTP 服务器 使用Python 3 4 1 My Code import ftplib import ssl ftps ftplib FTP TLS ftps ssl version ssl PRO
  • SQL Server 中非常大的表

    我们有一个非常大的表 gt 77M 记录并且还在不断增长 在 SQL Server 2005 64 位标准版上运行 并且我们发现了一些性能问题 每天添加多达十万条记录 有谁知道SQL Server标准版可以处理的记录数量是否有限制 应该考虑
  • 带有 TransactionScope 的嵌套事务

    如果你有这样的事情 IBinaryAssetStructureRepository rep new BinaryAssetStructureRepository var userDto new UserDto id 3345 var dto
  • 从 google 搜索下载前 1000 张图片

    我对谷歌图片进行了一些搜索 结果是数千张照片 我正在寻找一个可以下载第一个的 shell 脚本n图像 例如 1000 或 500 我怎样才能做到这一点 我想我需要一些高级的正则表达式或类似的东西 我尝试了很多方法但都无济于事 有人可以帮助我