【发布时间】:2011-06-19 14:09:20
【问题描述】:
我计划编写一个出色的 SEO 工具,我想知道如何从静态/动态网站链接中找到页面。
我只有像 www.yahoo.com 这样的域,我的系统应该会找到该主机中存在的所有页面。
有什么技术可以做到这一点吗?我可以使用任何语言,但我认为 .NET 会真正提升性能。
【问题讨论】:
我计划编写一个出色的 SEO 工具,我想知道如何从静态/动态网站链接中找到页面。
我只有像 www.yahoo.com 这样的域,我的系统应该会找到该主机中存在的所有页面。
有什么技术可以做到这一点吗?我可以使用任何语言,但我认为 .NET 会真正提升性能。
【问题讨论】:
我认为您几乎可以肯定必须解析页面代码以引用 HREF=
您可以使用 System.WebRequest.Create(uri) 请求 URL,然后在响应流上使用正则表达式。
如果.Net 中有更简单的方法,我当然会感兴趣。
【讨论】:
您不能只是“神奇地”找到域中存在的所有页面,除非有站点地图(大部分时间不存在)。
这是你可以做的 1.蛮力 - 这是一个坏主意,因为它只需要很长时间。 2. Regex over source code - 在标签中查找正则表达式
2 是您最好的选择,因为它将提供该页面上的所有链接。我会考虑添加一个递归功能,以便您“爬出”并在种子中找到的所有页面上执行相同的正则表达式操作。
这是算法
从种子开始(即:www.yahoo.com)
对本页源码执行正则表达式,将所有链接存放在一个 数据结构
在 #2 中找到的每个链接上递归调用 #1。你可能想要 将此限制为仅存在的链接 在种子域上(即:以或开头 包含 www.yahoo.com),以及不包括指向您已经访问过的页面的链接
具有访问者设计模式的树数据结构将是此类实现的理想选择。
【讨论】: