【问题标题】:How to retrieve a webpages sitemap如何检索网页站点地图
【发布时间】:2018-12-08 17:08:15
【问题描述】:

我正在尝试创建一个可以抓取页面及其子页面的内容抓取工具。 我的主要目标是我需要检索一个网页子页面(如果有的话)。

为了展示我想要的几乎就是这个website does

起初以为我试图创建这个伪代码:

1. Crawl Url
2. Check A-tags Values(href) and add to list
 - if the value contains in visited links ignore
3. Take new Values and turn them into possible URLs 
4. Add those into new NewUrls List
5. Crawl NewUrls
6. Keep Track of visited URLs 
7. Visit newUrls do nr 1.
8. Stop when visited URL equals to newUrl

所以这里的问题: 在 3rd 任务中,我必须将 URL 置于多个不同的规则中,其中仍然包含 baseHost,不包含不必要的项目等等。

由于可以有连续数量的不同样式的 href 值,因此必须有相当多的规则和检查,更不用说让它看起来很乱,而且还很慢。

有没有更好的方法来检索站点站点地图? 或者说得通俗一点,我怎样才能检索一个网站的所有子页面?

【问题讨论】:

    标签: c# web-crawler console-application


    【解决方案1】:

    由于可以有连续数量的不同样式的 href 值,因此必须有相当多的规则和检查,更不用说让它看起来很乱,而且还很慢。

    你可以用这个uri constructor来处理这个:

    public Uri (Uri baseUri, string relativeUri);
    

    基本 uri 将是您当前所在页面的 Uri。相对 Uri 将是 href 值。然后您可以检查结果是否与基本 uri 具有相同的主机。

    这解决了链接中的相对 url 和 http/https 变体等常见问题。

    您还可以考虑从 URL 中删除查询字符串。这是重复 url 的常见来源,但某些网站可能会将其用于功能。

    【讨论】:

    • 这很好但我发现一个问题是,如果我有一个 facebook 或任何其他与 hosturl 不同的链接,它也会将它们添加到列表中,如何过滤是最好的方法与主机网址不同的链接?例如,如果我的列表是:facebook.com/hosthosturl.com 我需要它来丢弃 facebook。我最初的想法是检查新 url 是否包含 hosturl,但我无法获取仅包含“page”或“/子页面”
    • 您可以简单地比较主机名。 baseUri.Host == hrefUri.Host
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多