我正在创建一个简单的 web spider ,我想知道是否有一种方法可以在我的PHP代码中触发,我可以获取域中的所有网页...
例如,假设我想在Stackoverflow.com上获取所有网页。这意味着它会得到: https://stackoverflow.com/questions/ask pulling webpages from an adult site -- how to get past the site agreement? https://stackoverflow.com/questions/1234214/ Best Rails HTML Parser
所有链接。我怎么能得到它。或者是否有 API 或 DIRECTORY 可以让我获得该功能?
还有一种方法可以获得所有子域吗?
顺便说一下抓取工具如何抓取没有SiteMaps或Syndication feeds的网站?
干杯。
答案 0 :(得分:2)
如果某个网站希望您能够这样做,他们可能会提供Sitemap。使用站点地图的组合并按照页面上的链接,您应该能够遍历站点上的所有页面 - 但这完全取决于站点的所有者以及他们如何访问它们。
如果网站不希望您这样做,那么您无法解决此问题。 HTTP没有提供列出目录内容的任何标准机制。
答案 1 :(得分:1)
你需要破解服务器抱歉。
您可以做的是,如果您拥有域名www.my-domain.com,您可以在其中放置一个PHP文件,用作请求点播文件。您将需要编写某种代码的php文件可以查看文件夹FTP Wise。 PHP可以连接到FTP服务器,所以这是一种方法:)
http://dk1.php.net/manual/en/book.ftp.php
您可以使用PHP读取dirs文件夹并将其作为数组返回。我能做的最好。
答案 2 :(得分:1)
正如您所说,您必须遵循所有链接。
要做到这一点,您必须首先检索stackoverflow.com,轻松:file_get_contents ("http:\\stackoverflow.com")
。
然后解析其内容,寻找链接:<a href="question/ask">
,不是那么容易。
您将这些新URL存储在数据库中,然后解析后面的URL,这将为您提供一组全新的URL,并对其进行解析。很快你将获得该网站的绝大部分内容,包括sub1.stackoverflow.com等内容。这称为爬行,实现起来非常简单,但一旦掌握了所有数据,就无法轻松检索有用信息。
如果您只对某个特定域感兴趣,请务必关闭指向外部站点的链接。
答案 3 :(得分:0)
不,不是你问的方式。
但是,如果您有明确的目标,您可以:
使用“主要”请求获取感兴趣的对象。一些站点提供JSON,XML,... apis来列出这样的对象(例如,SO可以这样列出问题)。然后使用“每对象”请求来获取特定于一个对象的信息
从其他开放(或付费)来源获取信息,例如搜索引擎,目录,“法医”工具,如SpyOnWeb
对网站的结构进行反向工程,例如:您知道/item/<id>
会将您带到ID为<id>
询问网站管理员
请注意,其中一些解决方案可能违反了网站的使用条款。无论如何,这些只是指针,在我的头顶。
答案 4 :(得分:0)
您可以使用WinHTTPTack /。但是不要抨击其他人的网站是礼貌的。
我只是用它来查找断开的链接并快速拍摄。
如果你开始锤击其他人的网站,他们会采取措施。其中一些不会很好(即锤你的)。
只是礼貌。