【问题标题】:bash script: word occurrences in web sitesbash 脚本:网站中出现的单词
【发布时间】:2012-08-02 00:13:50
【问题描述】:

我需要编写一个脚本来统计网页上出现的单词

我正在做的是计算随机IP(避免多次检查相同的ip),使用nmap查看端口80是否打开以了解它是否是Web服务器,然后我使用w3m制作http页面作为文件。 之后就很容易统计单词出现次数了

我有几个问题和问题

  • 这个过程需要很多时间,但我想不出任何方法可以让它更快
  • 许多开放了 80 端口的 ip 不是网站,它们没有启动并且可能有一些问题,有没有办法只检查启动的站点?
  • 这种方法只检查网站索引页面中出现的单词,有没有办法同时检查其他公共页面?

非常感谢

【问题讨论】:

  • 对于基于命名的虚拟主机,只有 IP 地址是不够的。您还需要知道指向该 IP 的每个 DNS 名称。一个 IP 可以为数千个网站提供服务。
  • 听起来你打算写一个网络爬虫。 bash 脚本可能不是完成这项工作的最佳工具。现有的框架可以帮助您合理快速地构建一个框架,例如scrapyHeritrix 等等。如果您确实想使用脚本构建一个,请考虑使用wget
  • 谢谢大家。首先我需要为我的大学制作这个脚本,所以它必须是 bash 编程。有没有办法获取该 ip 的每个 DNS 名称?我知道很多提供这项服务的网站。我也尝试使用“dig -x ipadress +short”,它给了我域名。问题是它只是一个主机。够了吗?因为正如你所说,一个 ip 可以包含数千个网站,而 dig 它只给我一个。有没有 linux 命令可以做到这一点?还有如何获取其他页面的信息(不是索引页面)
  • @DomenicoToscani - dig -x 提供 IP 的 PTR 记录。只能有一个。 DNS 不是为此而设计的。
  • 他们希望你建立一个网络库存并限制你使用 bash?他们可以要求您在卡祖笛上演奏贝多芬的第 9 曲,但他们可能也不会对结果感到满意。要么你误解了你的任务,要么你的主管误解了。祝你好运。

标签: linux bash shell dns


【解决方案1】:

我用 awk 做类似的事情。 awk 非常适合文本解析。我所做的是分析在 Apache 日志中每个 IP 地址完成了多少 HTTP GET。所以像你这样的机器人很容易出现在我的统计数据中:P 使用 awk,我的性能优于我所有同事在 PHP、Ruby 和 bash 脚本中提出的所有解决方案。

问题是您没有为每个文件(或页面)生成统计信息。您正在总结所有结果,对吗?所以我会使用 SQLite 来跟踪一个单词在所有扫描文本中出现的次数。使用 shell 脚本在 SQLite 中添加数据既简单又快速。

您还应该使用 wget --spider 或其他蜘蛛 HTTP 客户端,因为它们不仅会从索引页面下载内容,还会从第一页中包含链接 (HREF) 的所有页面下载内容。所以你可以递归地扫描一个网站。

【讨论】:

  • 我认为您没有正确理解我的回答。我已经涵盖了您的所有主题: * 性能问题?使用 awk 而不是 bash 脚本。解析文本比其他任何东西都快。 * 与其寻找开放的 80 端口,不如使用 wget 等真正的 HTTP 客户端进行网络爬取,并为他提供第一个访问网站。它将解决您尝试分析端口 80 中实际上不是网页的内容的问题。 * 此外,使用 wget 或其他具有递归功能的 HTTP 客户端,您将能够分析所有子页面和链接,而不仅仅是主页。
猜你喜欢
  • 1970-01-01
  • 2020-07-05
  • 2017-04-07
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多