显示来自 URL 的所有内部和外部链接的 Shell 脚本
在网页之间建立层次结构或网页开发人员用来连接它们的信息称为网页链接。网页链接有两种类型:一种是内部链接,另一种是外部链接。内部链接是链接同一网站上可用页面以在网站上产生循环的那些链接。同时,外部链接是链接到另一个网站或域的链接。外部链接在搜索引擎上的网站排名中起着至关重要的作用。通过增加指向您网站的外部链接的数量,可以看到网站排名的提高。在这里,我们被要求编写一个 shell 脚本,该脚本可以在终端屏幕上打印所有这些链接。提供给脚本的唯一输入是我们需要获取所有链接的网页的 URL。
注意:可以通过两种方式访问网站:一种是使用网络浏览器,另一种是使用遵循有限协议的终端命令来访问网站。终端命令有一些限制,因此我们还将使用基于终端的 Web 浏览器,这将帮助我们连接到该网站。
命令行界面:
对于命令行,我们将使用工具“lynx”。 Lynx 是一种基于终端的网络浏览器,不显示图像和其他多媒体内容,使其比其他浏览器快得多。
# sudo apt install lynx -y
让我们看看 GeeksForGeeks 项目页面链接。但在此之前,我们必须了解 lynx 浏览器中存在的选项。
- -dump:这将转储文档的格式化输出。
- -listonly:这将列出提到的 URL 上存在的所有链接。这与 -dump 一起使用。
现在应用这些选项:
# lynx -dump -listonly https://www.geeksforgeeks.org/computer-science-projects/?ref=shm
或将此终端输出重定向到任何文本文件:
# lynx -dump -listonly https://www.geeksforgeeks.org/computer-science-projects/?ref=shm > links.txt
现在使用 cat 命令查看链接:
# cat links.txt
外壳脚本
我们可以使用脚本语言轻松地在一个文件中完成上述所有工作,而且会更容易和愉快。有多种获取链接的方法,例如正则表达式。我们将使用带有“sed”命令的正则表达式。首先,我们将网页下载为文本,然后在文本文件上应用正则表达式。
现在我们将使用 nano 编辑器创建一个文件。代码解释如下。
# nano returnLinks.sh
下面是实现:
#!/bin/bash
# Give the url
read urL
# wget will now download this webpage in the file named webpage.txt
# -O option is used to concate the content of the url to the file mentioned.
wget -O webpage.txt "$urL"
# Now we will apply stream editor to filter the url from the file.
sed -n 's/.*href="\([^"]*\).*/\1/p' webpage.txt
授予文件权限:
要使用终端执行文件,我们首先通过更改文件的可访问性模式使其可执行。这里777代表读、写和可执行。还有一些其他权限可用于限制文件。
# chmod 777 returnLinks.sh
现在执行 shell 脚本并给出 URL:
# ./returnLinks.sh
您也可以将其存储在外部文件中:
脚本将是相同的;只有输出重定向会被添加到流编辑器命令中,以便输出可以存储在文件中。
#!/bin/bash
#Give the url
read urL
#wget will now download this webpage in the file named webpage.txt
wget -O webpage.txt "$urL"
#Now we will apply stream editor to filter the url from the file.
# here we will use output redirection to a text file. All the other code is same.
sed -n 's/.*href="\([^"]*\).*/\1/p' webpage.txt > links.txt
现在打开文件links.txt
我们现在将打开文件并查看文件中是否存在所有链接。
# cat links.txt