前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Debian 7上使用wget命令寻找失效的链接

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

原创
作者头像
心语花束
修改2018-09-27 17:56:45
1.6K0
修改2018-09-27 17:56:45
举报
文章被收录于专栏:云计算教程系列

介绍

您多少次点击网页上的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的新文件用于编辑。

代码语言:javascript
复制
sudo nano /var/www/spiderdemo.html

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

代码语言:javascript
复制
<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

代码语言:javascript
复制
sudo chown www-data:www-data /var/www/spiderdemo.html

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

代码语言:javascript
复制
sudo chmod 664  /var/www/spiderdemo.html

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

第2步 - 运行wget

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

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

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

代码语言:javascript
复制
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命令后,使用以下命令从输出文件中提取损坏的链接。

代码语言:javascript
复制
grep -B1 'broken link!' run1.log

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

代码语言:javascript
复制
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日志中搜索损坏的链接。

代码语言:javascript
复制
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命令链的示例输出如下:

代码语言:javascript
复制
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》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备
  • 第1步 - 创建示例网页
  • 第2步 - 运行wget
  • 第3步 - 查找引荐来源网址
    • 结论
    相关产品与服务
    云开发 CloudBase
    云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档