使用wget爬取整个网站

本文最后更新于:2022年4月26日 下午

使用wget爬取整个网站

本学期恰逢有门课搜索引擎作业需要暴力爬取整个网站。记录一下过程及操作。

1.安装wget

Mac下可以使用brew直接安装。但是第一次装好brew没有设置过镜像源、电脑里的git使用过的话,会有一点问题:

1
2
3
4
5
6
7
~ % brew install wget
fatal: Could not resolve HEAD to a revision
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
Error: No available formula or cask with the name "wget".
==> Searching for a previously deleted formula (in the last month)...
Error: No previously deleted formula found.

概括地说,找不到包。这是因为没有更新源。更新源时有以下报错:

1
2
3
~ % brew update
fatal: Could not resolve HEAD to a revision
Already up-to-date.

这就很清楚了,git找不到目标,给它设置一个即可。查看详细信息:

1
2
3
4
5
~ % brew update --verbose
XXX
fatal: unable to access 'https://github.com/Homebrew/homebrew-cask/': Failed to connect to github.com port 443: Operation timed out
Error: Fetching /opt/homebrew/Library/Taps/homebrew/homebrew-cask failed!
XXX

打开这个报错的路径:

1
2
3
cd /opt/homebrew/Library/Taps/homebrew/homebrew-core
git fetch --prune origin
git pull --rebase origin master

此时应该可以使用brew update了,下载wget成功。

2.wget使用参数

我们要下载一个网站所有的网页,包括所有引用源,但是不要跨域爬取。下面记录一些常用的参数(不是全部)。

2.1.我使用的参数:

  • -c,断点续传
  • -r,递归下载
  • -p,下载网页所需所有文件
  • -k,将绝对链接转换为本地相对链接,这样就可以本地脱机浏览网页了
  • --no-check-certificate,不检查证书(http可能被劫持。隐患换性能)
  • robots=off,忽略robots协议(真刑啊)
  • -m,镜像,-N -r -l inf --no-remove-listing 的缩写形式

2.2.另外的一些常用参数:

  • -np,不搜索上层目录
  • -nd,下载时不创建一层层目录,所有文件下载到当前文件夹中
  • -H,递归时转到外部主机下载图片或链接(真刑啊)
  • -l,指定递归深度
  • -A.[文件拓展名],下载.[文件拓展名]的文件
  • 伪装
    • --random-wait,获取多个文件时,每次随机等待间隔0.5*WAIT…1.5*WAIT 秒
    • --referer=URL,在 HTTP 请求头包含‘Referer: URL’(跨域访问有用)
    • --user-agent=AGENT,设置浏览器头(伪装成浏览器)
    • --load-cookies=FILE,会话开始前从FILE中载入cookies
    • --save-cookies=FILE,会话结束后保存cookies至FILE
    • --keep-session-cookies,载入并保存会话 (非永久) cookies

3.结果

1
2
3
下载完毕 --2022-04-22 03:37:37--
总用时:6h 12m 11s
下载了:64832 个文件,22m 10s (2.22 MB/s) 中的 2.9G

没找到在哪里设置多线程下载,还是挺慢的。还好网站没做反爬🤪


参考链接

  1. 简书 brew update 报错 “fatal: Could not resolve HEAD to a revision”
  2. StackOverflow Trying to install Hugo via Homebrew - “Could Not Resolve HEAD to a Revision”
  3. wget递归大部分网站目录
  4. wget命令详解
  5. wget爬取网站

本博客所有文章除特别声明外均为原创,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!