【问题标题】:How to download image and save image name based on URL?如何根据 URL 下载图像并保存图像名称?
【发布时间】:2012-09-03 09:19:42
【问题描述】:

如何从网页下载所有图片并在图片名称前加上网页的 URL(所有符号替换为下划线)?

例如,如果我要从http://www.amazon.com/gp/product/B0029KH944/ 下载所有图片,那么主产品图片将使用以下文件名保存:

www_amazon_com_gp_product_B0029KH944_41RaFZ6S-0L._SL500_AA300_.jpg

我已经安装了 WinHTTrack 和 wget,花费的时间比让他们做我想做的事情可能值得花费的时间更多,但我没有成功,所以 Stack Overflow 是我最后的努力。 (如果您将构建选项设置为根据站点结构保存文件并编写脚本以根据文件的父目录重命名文件,WinHTTrack 就接近了,但问题是主图像托管在不同的域上。)

【问题讨论】:

    标签: curl web-scraping wget scrape scraper


    【解决方案1】:

    好吧,我在我的新 Webscraper 中添加了一个下载选项。

    你可以这样做:

     xidel "http://www.amazon.com/dp/B0029KH944/" -e 'site:=translate(filter($_url, "http://(.*)", 1), "/.", "__")'  -f //img -e 'image:=filter($_url, ".*/(.*)", 1)' --download '$site;$image;'
    

    首先 -e 读取 url 并删除 /。字符,-f 选择所有 imgs,-e 秒读取文件名,然后 --download 下载它......

    虽然它的缺点是它会尝试将每个图像解析为 html 文件,这可能会减慢一点速度......

    【讨论】:

    • 嗨 BeniBela,我刚刚下载了 xidel 并运行了您提供的命令;但是,它产生了以下错误:“错误未知选项:.,(读取参数时:.,)”
    • 您使用的是 Windows 还是 Linux?在 Windows 上,它不支持外部级别的 '-单引号,您需要将 ' 与 "-quotes 交换。并且我在发布答案后更改了默认变量名称:两个 $_url 变量现在应该是替换为更简单的 $url
    • 在翻阅了所有文档并经过多次试验和错误之后,我想我终于掌握了您出色且极其灵活的刮刀 BeniBela :-)。这是我的问题中我想要的最终命令:xidel http://www.amazon.com/dp/B0029KH944/ -e "site:=fn:replace(filter($url, 'http://(.+)', 1), '\W', '_')" -f "//img[@id='prodImage']" -e "image:=filter($url, '.+/(.+)', 1)" --download "$site;$image;"
    • 说明: 我正在使用 XPath 2.0 的“替换”功能将所有符号替换为下划线,使用带有“http://”的 URL 作为输入,将所有内容保存到“站点”变量中;然后我提取所有带有 id="prodImage" 的图像(主要产品图像),只将图像名称保存到“图像”变量中;最后,我使用连接的字符串 $site;$image; 下载图像。作为图像的文件名。任务完成!
    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 2019-12-24
    相关资源
    最近更新 更多