如何在Debian 7上使用wget命令寻找失效的链接

介绍

您多少次点击网页上的HTML链接只是为了获得404 Not Found错误?存在断开的链接,因为网页有时会随时间移动或删除。网站管理员的工作是在人类网络访问者或搜索引擎机器人之前找到那些损坏的链接。延迟纠正问题会导致糟糕的用户体验以及搜索引擎页面排名可能受到的损失。

如果您的网站包含多个页面,则手动检查每个链接会变得过于劳动密集,但有许多工具可以自动执行该任务。您可以使用基于网络的应用,例如Google网站站长工具和万维网联盟(W3C)提供的应用,但它们通常缺少更多高级功能。如果您运行WordPress,您可以使用插件,但是一些共享的Web托管公司禁止它们,因为它们与网站在同一服务器上运行,并且链接检查是资源密集型的。

另一种选择是在单独的机器上使用基于Linux的程序。这些包括一般网络抓取工具,也可以发现断开的链接(如wget)和自定义链接检查器(如linkcheckerklinkstatus)。它们具有高度可定制性,可最大限度地减少对目标网站响应时间的负面影响。

本教程将介绍如何使用它wget来查找网站上所有已损坏的链接,以便您更正这些链接。

准备

要学习本教程,您需要:

  • 两个Debian 7腾讯云CVM,一个从(generic-1)运行wget的通用机器和一个托管你的网站(webserver-1)的机器。
  • generic-1webserver-1上的有sudo权限的非root用户。(你可能需要一台已经设置好可以使用sudo命令的非root账号的Debian 7服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)
  • webserver-1需要安装LAMP堆栈。
  • web服务器可以具有其自己的可选的注册域名。如果是这样,请在您看到的任何地方使用您的域名your_server_ip

虽然本教程是为Debian 7编写的,但这些wget示例也应该在其他现代Linux发行版上运行。您可能需要wget在默认情况下未包含的其他发行版上安装。

第1步 - 创建示例网页

首先,我们将添加一个包含多个缺失链接的示例网页。

登录webserver-1。使用nano或您喜欢的文本编辑器打开一个名为spiderdemo.html的新文件用于编辑。

sudo nano /var/www/spiderdemo.html

将以下内容粘贴到文件中。这是一个非常简单的网页,其中包含两个断开的链接,一个是内部的(在服务器IP中添加,在下面突出显示)和一个外部链接。

<html>
<head> <title>Hello World!</title> </head>
<body>
​
<p>
<a href="http://your_server_ip/badlink1">Internal missing link</a>.
<a href="https://www.qq.com">External missing link</a>.
</p>
​
</body>
</html>

保存并关闭文件。

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

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

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

sudo chmod 664  /var/www/spiderdemo.html

您现在可以在以下位置查看示例页面: your_server_ip/spiderdemo.html

第2步 - 运行wget

wget是一个通用的网站下载程序,也可以用作网络爬虫。在此步骤中,我们将配置wget为报告每个链接是指向现有页面还是在不下载页面的情况下中断。

注意:仅检查您拥有的网站上的链接。网站上的链接检查会产生大量的计算开销,因此这些活动可能会被解释为垃圾邮件。

登录generic-1并运行以下wget命令。每个标志的说明如下; 您可以为您的用例修改此命令。

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

以下是您需要的基本标志:

  • --spider停止wget下载页面。
  • -rwget递归方式跟随页面上的每个链接。
  • -nd,简称--no-directories,防止wget在您的服务器上创建目录层次结构(即使它被配置为仅蜘蛛)。
  • -nv,简称--no-verbose,停止wget输出识别断开链接所不需要的额外信息。

以下是可用于自定义搜索的可选参数:

  • -H,简称--span-hostswget爬行到除主要域之外的子域和域(即外部站点)。
  • -l 1是的缩写--level。默认情况下,wget从初始URL爬到最多五个级别,但在此我们将其设置为一个。您可能需要使用此参数,具体取决于您网站的组织。
  • -w 2,简称--wait,指示wget在请求之间等待2秒以避免轰炸服务器,从而最大限度地降低性能影响。
  • -o run1.logwget输出保存到一个调用的文件中,run1.log而不是在终端中显示它。

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

grep -B1 'broken link!' run1.log

-B1参数指定对于每个匹配行,wget在匹配行之前显示另一行前导上下文。前一行包含断开链接的URL。以下是上述grep命令的示例输出。

http://your_server_ip/badlink1:
Remote file does not exist -- broken link!!!
https://www.qq.com/thisdoesntexist:
Remote file does not exist -- broken link!!!

第3步 - 查找引荐来源网址

第2步报告损坏的链接,但不识别引荐来源网页,即您网站上包含这些链接的网页。在此步骤中,我们将找到引荐来源网页。

识别引荐来源URL的便捷方法是检查Web服务器的访问日志。登录到webserver-1并在Apache日志中搜索损坏的链接。

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

上述命令中的第一个grep查找wget到Web服务器的所有访问请求。每个访问请求都包括用户代理字符串,该字符串标识负责生成Web请求的软件代理。为用户代理*标识符wgetWget/1.13.4 (linux-gnu)

第二个grep搜索断开链接的部分URL(/badlink1)。使用的部分URL是域后面的URL的一部分。

grep命令链的示例输出如下:

111.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)"   

引荐来源网址是该行的倒数第二项:your_server_ip/spiderdemo.html

结论

本教程介绍如何使用该wget工具查找网站上损坏的链接,以及如何查找包含这些链接的引荐来源页面。您现在可以通过更新或删除任何损坏的链接进行更正。

更多Debian教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Find Broken Links on Your Website Using Wget on Debian 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

秒懂!四步16点高效搞定高性能web服务器nginx

Nginx(读音engine x)服务器由于性能优秀稳定、配置简单以及跨平台,被越来越多的公司和个人所采用,现已成为市场份额继Apache之后的第二大Web服务...

1542
来自专栏landv

robocopy的用法,数据库局域网备份

2222
来自专栏马涛涛的专栏

使用leancloud给简历加数据库,实现留言功能

数据必须存在服务器上,这样任何设备访问服务器都可以得到数据,如果存在客户端的本地,那么其他客户端设备无法读取到.所以数据必须存储在服务器的数据库上

2035
来自专栏漏斗社区

嗤!给你来点fiyocms漏洞喷雾

0x01 背景 上周发的phpcms的漏洞分析,有些伙伴觉得比较复杂,于是便诞生本篇,通过审计一些普通的cms来一步步学习代码审计的技巧。 本篇涉及的源码...

38710
来自专栏landv

robocopy的用法,数据库局域网备份

2495
来自专栏云计算教程系列

如何在Ubuntu 14.04上导入和导出MongoDB数据库

MongoDB是最受欢迎的NoSQL数据库引擎之一。它以可扩展,强大,可靠和易于使用而闻名。在本文中,我们将向您展示如何导入和导出MongoDB数据库。

4290
来自专栏linux驱动个人学习

Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)

因此当前linux的调度程序由两个调度器组成:主调度器,周期性调度器(两者又统称为通用调度器(generic scheduler)或核心调度器(core sch...

2882
来自专栏程序员互动联盟

怎样快速调试linux内核?有哪些需要注意的问题?

这个问题就比较专业了,linux内核调试还是在调试内核驱动的时候用过,涉及的程度不是特别深,但是可以说下大致的思路,linux虽然贵为操作系统,但是归根到底还是...

1133
来自专栏芋道源码1024

点我达分布式任务调度系统-DaJob

随着互联网的发展,应用服务中的定时任务数量日益增加,常规的垂直应用架构已无法应对,分布式服务架构势在必行。同时,也迫切需要一个分布式任务调度系统来管理分...

3662
来自专栏Golang语言社区

几种服务器端IO模型的简单介绍及实现

一些概念: 同步和异步 同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发I/O操作并等待或者轮询的去查看I/O操作是否就绪,而异步是指用户进程...

41610

扫码关注云+社区

领取腾讯云代金券