如何在 Debian 7 上使用 Wget 查找网站上的断开链接

介绍

多少次你点击一个HTML链接在一个网页上只得到一个404没有找到错误?破坏的链接存在,因为网页有时会被移动或删除,随着时间的推移,这是网页管理员的工作,以找到那些破坏的链接之前,人类的网页访问者或搜索引擎机器人做。

如果您的网站包含超过几页, 手动检查每个单个链接 变得过于劳动密集型, 您可以使用基于网络的应用程序,如由Google Webmaster Tools和万维网联盟(W3C)提供的应用程序,但它们一般缺乏更先进的功能. 如果您运行WordPress,您可以使用插件,但一些共享的网络托管公司禁止它们,因为它们运行在与网站相同的服务器上,链接检查是资源密集型的.

另一种选择是在单独的机器上使用基于Linux的程序. 这些包括一般的网页扫描仪,可以发现破坏的链接(如wget)和定制的链接扫描仪(如linkchecker和klinkstatus)。

本教程解释了如何使用wget来找到网站上的所有破坏的链接,以便您可以修复它们。

前提条件

要遵循本教程,您将需要:

虽然本教程是为 Debian 7 编写的,但wget示例也应该在其他现代 Linux 发行版上运行。

步骤1 - 创建一个样本网页

首先,我们将添加一个具有多个缺失的链接的样本网页。

登录到 webserver-1 . 打开名为 spiderdemo.html’的新文件以使用 nano` 或您最喜欢的文本编辑器进行编辑。

1sudo nano /var/www/spiderdemo.html

這是一個非常簡單的網頁,包含兩個破損的連結,一個內部(在您的伺服器 IP 中添加,在下面顯示)和一個外部。

 1<html>
 2<head> <title>Hello World!</title> </head>
 3<body>
 4
 5<p>
 6<a href="http://your_server_ip/badlink1">Internal missing link</a>.
 7<a href="https://www.digitalocean.com/thisdoesntexist">External missing link</a>.
 8</p>
 9
10</body>
11</html>

保存并关闭文件。

接下来,将spiderdemo.html的文件所有者和组更改为默认的 Web 服务器用户,即www-data

1sudo chown www-data:www-data /var/www/spiderdemo.html

最后,更改新 HTML 文件的文件权限。

1sudo chmod 664  /var/www/spiderdemo.html

您现在可以看到示例页面在http://your_server_ip/spiderdemo.html。

步骤2 - 运行wget

wget是一个通用网站下载程序,也可以用作网页扫描器,在这个步骤中,我们将配置wget来报告每个链接是否指向现有页面或被打破而没有下载页面。

** 注意:** 只检查您所拥有的网站上的链接。在网站上检查链接会发生重大计算过剩,因此这些活动可能会被解释为垃圾邮件。

登录 generic-1 并运行以下wget命令. 每个旗帜的解释如下;您可以为您的使用案例修改此命令。

1wget --spider -r -nd -nv -H -l 1 -w 2 -o run1.log http://your_server_ip/spiderdemo.html

以下是您需要的基本旗帜:

*「--蜘蛛」阻止「wget」下载页面。 *「-r」使「wget」重复跟随页面上的每一个链接。 *「-nd」缩写为「--没有目录」,阻止「wget」在您的服务器上创建一个目录等级(即使它已配置为只有蜘蛛)。 *「-nv」缩写为「--no-verbose」,阻止「wget」提取不需要识别破碎链接的额外信息。

以下是可选参数,您可以使用来定制您的搜索:

*-H',简称-----------hosts',使`wget'爬入除主域以外的子域和领域(即外部站点)。

  • -l ' 号 一级'简称为一级'。 默认情况下,wget'从最初的URL爬入了最深的5个级别,但在这里我们把它设置为1。 您可能需要根据您网站的组织安排来播放此参数 。
  • -w 2',简称--等',指示wget ' 在请求之间等2秒,以避免轰炸服务器,尽量减少任何性能影响。 *-o run1.log'将wget'的输出保存到一个名为run1.log'的文件,而不是在终端显示。 .

在运行上述wget命令后,使用以下命令从输出文件中提取破碎的链接。

1grep -B1 'broken link!' run1.log

-B1参数规定,对于每个匹配的行,wget 在匹配的行之前显示一个额外的领先背景线。

1http://your_server_ip/badlink1:
2Remote file does not exist -- broken link!!!
3https://www.digitalocean.com/thisdoesntexist:
4Remote file does not exist -- broken link!!!

步骤 3 - 查找引用 URL

步骤 2 报告破坏的链接,但不识别引用网页,即您网站上的包含这些链接的网页。

一个方便的方法来识别引用 URL 是检查 Web 服务器的访问日志. 登录到 webserver-1 并搜索 Apache 日志,查找破坏的链接。

1sudo grep Wget /var/log/apache2/access.log | grep "HEAD /badlink1"

上面的命令中的第一个抓住会找到wget向 Web 服务器的所有访问请求,每个访问请求都包含 User Agent 字符串,该字符串标识了负责生成 Web 请求的软件代理人。

第二个抓住搜索破坏链接的部分URL(/badlink1)。

grep命令链的样本输出如下:

1111.111.111.111 - - [10/Apr/2015:17:26:12 -0800] "HEAD /badlink1 HTTP/1.1" 404 417 "http://your_server_ip/spiderdemo.html" "Wget/1.13.4 (linux-gnu)"

引用 URL 是行上的第二个最后条目: http://your_server_ip/spiderdemo.html

结论

本教程解释了如何使用wget工具在网站上找到破坏的链接,以及如何找到包含这些链接的引用页面。

Published At
Categories with 技术
comments powered by Disqus