【问题标题】:wget, recursively download all jpegs works only on website homepagewget,递归下载所有jpeg作品仅在网站主页上
【发布时间】:2016-08-12 18:46:47
【问题描述】:

我正在使用wget 从网站下载所有 jpeg。

我搜索了很多,应该是这样的:

wget -r -nd -A jpg  "http://www.hotelninfea.com"

这应该递归 -r 下载文件 jpegs -A jpg 并将所有文件存储在一个目录中,而无需重新创建网站目录树 -nd

运行此命令只下载网站主页的jpeg,而不是所有网站的整个jpeg。

我知道 jpeg 文件可以有不同的扩展名(jpg、jpeg)等等,但事实并非如此,也没有任何 robots.txt 限制起作用。

如果我从上一个命令中删除过滤器,它会按预期工作

wget -r -nd "http://www.hotelninfea.com"

这发生在 Lubuntu 16.04 64 位 wget 1.17.1

这是一个错误还是我误解了什么?

【问题讨论】:

    标签: web-scraping jpeg wget


    【解决方案1】:

    我怀疑这是因为您提到的主页包含指向http://.../something.php 形式的其他页面的链接,即有一个明确的扩展名。然后选项-A jpeg 具有从遍历过程中删除这些页面的“副作用”。

    在这种特殊情况下,可能有点肮脏的解决方法是这样的:

    wget -r -nd -A jpg,jpeg,php  "http://www.hotelninfea.com" && rm -f *.php
    

    即,仅下载必要的额外页面,然后在 wget 成功终止时将其删除。

    【讨论】:

      【解决方案2】:

      ewcz anwer 指出了正确的方法,--accept acclist 参数有双重作用,它定义了文件保存的规则和跟随链接的规则。

      深入阅读the manual我发现了这个

      如果指定了“--adjust-extension”,则本地文件名可能会附加“.html”。如果使用“-E -A.php”调用 Wget,则将接受诸如“index.php”之类的文件名,但下载时将命名为“index.php.html”,不再匹配,因此文件将被删除。

      所以你可以这样做

      wget -r -nd -E -A jpg,php,asp "http://www.hotelninfea.com"
      

      当然,网站管理员可能一直在使用custom extensions

      所以我认为最强大的解决方案是 bash 脚本 喜欢

      WEBSITE="http://www.hotelninfea.com"
      DEST_DIR="."
      
      image_urls=`wget -nd --spider -r "$WEBSITE" 2>&1 | grep '^--' | awk '{ print $3 }' | grep -i '\.\(jpeg\|jpg\)'`
      
      for image_url in $image_urls; do
        DESTFILE="$DEST_DIR/$RANDOM.jpg"
        wget "$image_url" -O "$DESTFILE"
      done
      

      --spider wget 不会下载页面,只需检查它们是否存在
      $RANDOM 向操作系统询问一个随机数

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-15
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-05
        • 2016-12-31
        • 1970-01-01
        相关资源
        最近更新 更多