用Python管理网站ROT的教程

156 阅读6分钟

自从万维网成为主流以来,已经超过25年了。几十年来,大多数组织已经多次推出、重新推出和修改他们的网络存在,努力与冗余、过时和琐碎(ROT)的数据作斗争,这种情况持续到今天。

拥有一个组织良好、具有有效链接和最新内容的网站是任何企业的互联网存在的基石,也是吸引和保留客户的关键。客户更看重最新的信息、可用性和功能性,而不是时尚的外观。从理论上讲,检查你的网站的ROT数据应该是很容易的,但在实践中,随着网站的发展和变得越来越复杂,它所消耗的时间和资源往往比你想象的要多。

一般来说,有两种方法来处理ROT问题:

  • 手工验证 --只对最小的网站可行。不幸的是,即使是中等规模的网站通常也有几十个内部交叉链接和很多很多外部参考链接。
    • 从这个角度来看,谷歌只对一个网页的前150个链接进行索引,而有大量链接的网页是非常普遍的。
  • 自动验证 --这是唯一有意义的方法,因为即使中小企业也有数百个页面的网站,而企业网站可能有数百万个页面需要验证。
    • 例如,亚马逊有1200万个产品列表,每个产品都有多个页面,产生独特的内容。

如果没有自动化,甚至试图检查ROT也是不现实的。本博客将讨论处理ROT的各种自动化方法,包括:

  1. 检查单个页面的链接
  2. 将链接检查器扩展到搜索整个网站
  3. 检查多余的和过时的内容

这篇文章中的所有代码都可以在我的 GitHub repo中找到 。让我们开始吧。

在你开始之前。安装网站ROT Python环境

为了跟上本文的代码,你可以下载并安装我们预建的Website ROT环境,其中包含Python 3.9版本和本文中使用的软件包,以及已经解决的依赖关系。

为了下载这个随时可用的Python环境,你需要创建一个 ActiveState Platform 账户。只需使用你的GitHub凭证或你的电子邮件地址来注册。注册很简单,它为你解锁了ActiveState Platform的许多好处!

或者你也可以使用我们的 State工具 来安装这个运行时环境。

runtime

对于Windows用户,在CMD提示下运行以下程序,就可以自动下载并安装我们的CLI、状态工具以及网站ROT运行时间 到一个虚拟环境中。

powershell -Command "& $([scriptblock]::Create((New-Object Net.WebClient).DownloadString('https://platform.activestate.com/dl/cli/install.ps1'))) -activate-default Pizza-Team/Website-ROT"

对于Linux用户,运行以下程序以自动下载并安装我们的CLI、状态工具以及 Website ROT运行时 到一个虚拟环境中。

sh <(curl -q https://platform.activestate.com/dl/cli/install.sh) --activate-default Pizza-Team/Website-ROT

1-网站页面上的自动链接检查

最常见的(也是最令人沮丧的)网站ROT类型之一是破损的链接,它可以向访问者显示一些错误,包括:

  • 404 "找不到页面"
  • 301 "永久重定向"
  • 302 "临时重定向"

解决这类错误的最佳实践方法通常是:

  1. 发现坏链接/错误
  2. 内容经理审查错误和原始链接
  3. 更新链接或替换内容

自动链接检查器也会发现一些其他代码,如200(OK/成功状态),或其他表示意外错误或认证要求而不是坏链接的代码。

虽然有一些基于Python的程序可以为你检查链接(如 Dead_Link_Checker),但你可能更喜欢用Python编写自己的 程序,使用RequestsBeautifulSoup 包 的组合 ,如我 在Website ROT环境 中包含的那些 。自己编写的好处是,你可以解析和循环检索到的各种文件,以提供更多的自动化。

如果你已经安装了 Website ROT环境,我的 GitHub repo 会自动克隆到虚拟环境中,所以你所需要做的就是cd进入该目录并运行DLChecker。

下面是一个 实时网站上多个页面的遍历输出示例 :

(dlc) Dead_Link_Checker% python3 ./src/DLChecker.py https://gifted-tesla-ec935f.netlify.app/

2-对整个网站进行自动链接检查

基本的链接检查Python脚本可以运行一个网站的单个页面。但是你可以很容易地扩展这个基本的框架,包括更多的循环,可以自动递归地检查整个网站。

首先,你需要使用 urllib.request 检索你想从网站解析的页面:

resp = urllib.request.urlopen(“http://some.site/page.html”)

接下来,使用BeautifulSoup解析该页面:

soup = BeautifulSoup(resp, parser, from_encoding=resp.info().get_param('charset'))

然后,循环检查结果,以处理页面中所有的href链接:

for link in soup.find_all('a', href=True):

最后,你需要循环检查页面的HTTP状态代码,这样你就可以看到是否有链接是坏的:

for link in soup.find_all('a', href=True):

输出结果看起来是这样的:

(diy) % python adlc.py https://gifted-tesla-ec935f.netlify.app/random.html

3-过时的和多余的内容

你的组织的网站上的内容可能会变得过时或多余,如果没有一些东西来检查这些东西。有时,由于重定向的使用不当,一个页面在外部检查器看来可能是多余的。例如,如果页面一直返回为临时重定向,或返回为正在用JavaScript处理,那么像谷歌这样的搜索引擎就会认为该内容在两个地方都存在,这会降低你在搜索结果中的排名,因为它看起来不再有一个单一的权威性页面。这种无意的冗余可以通过可以发现死链接的那种自动化来发现。

不过,一般来说,使用用于管理网站的内容管理系统(CMS)外部的检查器来自动发现过时和多余的内容要困难得多。这主要是由于页面内容(通常)是动态生成的,所以你不能依靠时间戳来确定内容有多旧。

虽然你仍然可以使用Python来帮助自动检查内容,但你的Python脚本将需要根据你的特定Web CMS进行定制。例如, Drupal的智能工具 插件使用Python和NLP工具来帮助收集、分析和标记存储在Drupal网站上的所有内容,这使得识别潜在的冗余内容的过程变得更加容易。

结论 - 自动去除ROT

网络内容经理已经够忙的了,他们要优化正在进入他们公司网站的新内容流。他们不需要浪费时间去梳理网站的旧内容和破损内容。通过启用基于Python等流行语言的自动化,内容管理团队将有更多的时间专注于增加价值,同时还能确保现有的内容不会过时,坏的链接也不会导致糟糕的客户体验。如果你的网站充满了ROT,无论是现有客户还是潜在客户都不会高兴。