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


我是 Web 开发的 n00b

,我有一个 n00b 问题。

假设有一个网站,例如,

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

有没有办法尝试从索引开始直接访问每个子页面,而无需了解子页面名称?具体来说,是否有可能在Javascript中构建一个像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
     .
     .
     .
*/

不依靠任何过度的蛮力?

理论

您可以获取网站上的链接列表,如果该网站想让您拥有它们。这是通过站点地图完成的: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>

免責聲明

并非所有网站都会为您提供此内容,并且无法保证那里会有哪些链接或它是一个完整的列表。这是由你弄清楚它是否对你的目的有用。

最新更新