是否可以远程或本地直接通过站点树爬网站树?

时间:2015-04-14 17:51:18

标签: javascript algorithm url tree web-crawler

我是网络开发的n00b,我有一个n00b问题。

假设有一个网站,例如

index.php
    page1.php
    page2.php
      page2-1.php
      page2-2.php
    page3.php 

有没有办法可以尝试从索引开始直接转到每个子页面,而不知道子页面名称?具体而言,是否可以在Javascript中构造一个类似于

function
console.log(printSiteTree("StackOverflow.com");
/* Prints: 

   stackoverflow.com
     stackoverflow.com/questions
            .
            .
            .
            stackoverflow.com/questions/29633992
            .
            .
            .
                stackoverflow.com/questions/29633992/is-there-any-tool-to-calculate-the-distance-between-a-program-point-and-a-execut
            .
            .
            .
     stackoverflow.com/tags
     .
     .
     .
*/

不依赖任何过度的蛮力?

1 个答案:

答案 0 :(得分:1)

理论

如果网站希望您拥有这些链接,则可以获取该网站上的链接列表。 这是通过站点地图完成的:http://en.wikipedia.org/wiki/Site_map

通常,网站会在其robots.txt文件中提供站点地图的位置,以便抓取工具可以访问该站点地图。 最有可能的是,它将是一个XML文件,其URL嵌套在sitemap/loc下。

实施例

假设我们想获取抓取http://www.msn.com/的链接 我们可以转到通常的机器人文件位置,即http://www.msn.com/robots.txt,我们可以找到该行:
Sitemap: http://sitemap.msn.com/xml
所以我们访问了URL并得到了我们的URL列表:

<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://sitemap.msn.com/xml/en-nz-autos-0</loc>
</sitemap>
<sitemap>
<loc>http://sitemap.msn.com/xml/en-nz-entertainment-0</loc>
</sitemap>
<sitemap>
<loc>http://sitemap.msn.com/xml/en-nz-entertainment-1</loc>
</sitemap>
<sitemap>
<loc>http://sitemap.msn.com/xml/en-nz-finance-0</loc>
</sitemap>

声明

并非所有网站都会向您提供此功能,并且无法保证会有哪些链接或它将是完整列表。这是为了弄清楚它是否对你的目的有用。