2

我正在制作一个简单的网络蜘蛛,我想知道是否有一种方法可以在我的 PHP 代码中触发,我可以获取域上的所有网页......

例如,假设我想获取 Stackoverflow.com 上的所有网页。这意味着它将获得: https : //stackoverflow.com/questions/ask 从成人网站拉网页——如何通过网站协议? https://stackoverflow.com/questions/1234214/ 最佳 Rails HTML 解析器

和所有的链接。我怎么能得到那个。或者是否有一个APIDIRECTORY可以让我得到它?

还有一种方法可以获得所有子域吗?

顺便说一句,爬虫如何爬取没有SiteMapsSyndication feeds的网站?

干杯。

4

5 回答 5

4

如果某个站点希望您能够做到这一点,他们可能会提供一个站点地图。使用站点地图和页面上的链接的组合,您应该能够遍历站点上的所有页面 - 但这实际上取决于站点的所有者,以及他们如何访问它。

如果该站点不希望您这样做,则您无能为力。HTTP 不提供任何标准机制来列出目录的内容。

于 2012-12-17T21:21:41.343 回答
1

抱歉,您需要破解服务器。

您可以做的是,如果您拥有域 www.my-domain.com,您可以在其中放置一个 PHP 文件,用作按需请求文件。您需要在该 php 文件中编写某种代码,以便查看文件夹 FTP Wise。PHP 可以连接到 FTP 服务器,所以这是一种方法:)

http://dk1.php.net/manual/en/book.ftp.php

您可以使用 PHP 读取 dirs 文件夹并将其作为数组返回。我能做到的最好。

于 2012-12-17T21:20:54.143 回答
1

正如您所说,您必须遵循所有链接。

为此,您必须首先检索 stackoverflow.com,简单:file_get_contents ("http:\\stackoverflow.com")

然后解析它的内容,寻找链接:<a href="question/ask">,没那么容易。

您将这些新 URL 存储在数据库中,然后解析那些之后,这将为您提供一组全新的 URL,解析这些。很快,您将拥有该网站的绝大多数内容,包括 sub1.stackoverflow.com 之类的内容。这称为爬取,实现起来非常简单,尽管一旦拥有所有数据后检索有用信息就不是那么简单了。

如果您只对某个特定域感兴趣,请务必关闭指向外部站点的链接。

于 2012-12-17T21:30:26.190 回答
0

不,不是你问的方式。

但是,只要您有明确的目标,您就可以:

  • 使用“主要”请求来获取感兴趣的对象。一些站点提供 JSON、XML、... api 来列出此类对象(例如,SO 可以通过这种方式列出问题)。然后使用“每个对象”请求来获取特定于一个对象的信息

  • 从其他开放(或付费)来源获取信息,例如搜索引擎、目录、“取证”工具(如 SpyOnWeb)

  • 对站点的结构进行反向工程,例如,您知道这/item/<id>会将您带到 ID 为的项目页面<id>

  • 问站长

请注意,其中一些解决方案可能违反了网站的使用条款。无论如何,这些只是我头顶上的指针。

于 2012-12-17T21:32:13.633 回答
0

您可以使用WinHTTPTack /。但不要敲别人的网站是一种礼貌。

我只是用它来查找损坏的链接并进行快照。

如果您确实开始打击其他人的网站,他们将采取措施。其中一些不会很好(即锤你的)。

只要有礼貌。

于 2012-12-17T21:48:40.763 回答