【问题标题】:wget recursion and file extractionwget递归和文件提取
【发布时间】:2020-09-02 15:16:34
【问题描述】:

我正在尝试使用 wget 优雅而有礼貌地从网站下载所有 pdf。 pdf 位于起始 URL 下的各个子目录中。似乎 -A pdf 选项与 -r 选项冲突。但我不是 wget 专家!这个命令:

wget -nd -np -r site/path

忠实地遍历整个站点,下载路径下游的所有内容(不礼貌!)。这个命令:

wget -nd -np -r -A pdf site/path

没有下载任何东西立即完成。在调试模式下运行相同的命令:

wget -nd -np -r -A pdf -d site/path

显示调试消息忽略了子目录:

决定是否将“https://site/path/subdir1”排入队列。 https://site/path/subdir1 (subdir1) 与 acc/rej 规则不匹配。决定不加载它。

我认为这意味着子目录不满足“pdf”过滤器并被排除在外。有没有办法让 wget 递归到子目录(随机深度)并且只下载 pdf(到单个本地目录)?还是 wget 需要下载所有内容,然后我需要手动过滤 pdf 文件?

更新:感谢大家的想法。解决方案是使用两步方法,包括修改版本:http://mindspill.net/computing/linux-notes/generate-list-of-urls-using-wget/

【问题讨论】:

    标签: linux screen-scraping wget


    【解决方案1】:

    更新:感谢大家的想法。解决方案是使用两步方法,包括修改版本:http://mindspill.net/computing/linux-notes/generate-list-of-urls-using-wget/

    【讨论】:

      【解决方案2】:

      试试这个

      1) “-l” 开关指定 wget 从指定的主 URL 向下一级。您显然可以将其切换到您想要关注的链接中向下多少级。

      wget -r -l1 -A.pdf http://www.example.com/page-with-pdfs.htm
      

      更多详情请参考man wget

      1. 如果上面的方法不行,试试这个

        验证网站的 TOS 是否允许抓取它。然后,一种解决方案是:

        mech-dump --links 'http://example.com' | grep pdf$ | sed 's/\s+/%20/g' | xargs -I% wget http://example.com/% mech-dump 命令带有 Perl 的模块 WWW::Mechanize (libwww-mechanize-perl package on debian & debian like distros

      用于安装 mech-dump

      sudo apt-get update -y
      sudo apt-get install -y libwww-mechanize-shell-perl
       
      

      github 仓库https://github.com/libwww-perl/WWW-Mechanize

      1. 我还没有对此进行测试,但是您仍然可以尝试一下,我认为您仍然需要找到一种方法来获取网站的所有 URL 并管道到我提供的任何解决方案。

      您需要安装 wget 和 lynx:

      sudo apt-get install wget lynx
      

      为此示例 pdflinkextractor 准备一个你想要的脚本名称

          #!/bin/bash
          
          WEBSITE="$1"
          
          echo "Getting link list..."
          
          lynx -cache=0 -dump -listonly "$WEBSITE" | grep ".*\.pdf$" | awk '{print $2}' | tee pdflinks.txt
          
             
          
          echo "Downloading..."    
          wget -P pdflinkextractor_files/ -i pdflinks.txt
      

      运行文件

      chmod 700 pdfextractor
      $  ./pdflinkextractor http://www.pdfscripting.com/public/Free-Sample-PDF-Files-with-scripts.cfm
      

      【讨论】:

      • 使用 -r -l1 仍会导致“...与 acc/rej 规则不匹配”。没有下载任何内容的消息。由于子目录的深度不同,我也尝试过 -m。但根本原因似乎是子目录与pdf过滤器不匹配。所以我认为这可能需要一个两步解决方案。
      • 聪明的方法,不幸的是,mech-dump 似乎只抓取顶级链接,并没有下降到子目录。由于顶层没有 pdf,因此不会返回任何内容。不过,感谢您的新颖方法!
      • 如果它对您有任何帮助,您可以点赞它,以便将来帮助其他人。
      • lynx 是个好主意,但它似乎不会递归(与 mech-dump 相同)。我赞成您的回答,但我没有声誉。对此感到抱歉 - 感谢您的帮助!
      • 我正在为您的问题寻找更好的解决方案,请给我一些时间。
      猜你喜欢
      • 1970-01-01
      • 2016-07-17
      • 2010-09-21
      • 2014-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多