【发布时间】:2012-04-23 22:00:41
【问题描述】:
我想爬取整个网站,我已经阅读了几个线程,但我无法设法获取第二级数据。
也就是说,我可以从起始页面返回链接,但是我找不到解析链接并获取每个链接内容的方法...
我使用的代码是:
<?php
// SELECT STARTING PAGE
$url = 'http://mydomain.com/';
$html= file_get_contents($url);
// GET ALL THE LINKS OF EACH PAGE
// create a dom object
$dom = new DOMDocument();
@$dom->loadHTML($html);
// run xpath for the dom
$xPath = new DOMXPath($dom);
// get links from starting page
$elements = $xPath->query("//a/@href");
foreach ($elements as $e) {
echo $e->nodeValue. "<br />";
}
// Parse each page using the extracted links?
?>
有人可以帮我举个例子吗?
我将不胜感激!
嗯,谢谢你的回答! 我尝试了一些东西,但还没有得到任何结果——我是编程新手..
您可以在下面找到我的 2 次尝试 - 第一次尝试解析链接,第二次尝试用 Curl 替换 file_get 内容:
1)
<?php
// GET STARTING PAGE
$url = 'http://www.capoeira.com.gr/';
$html= file_get_contents($url);
//GET ALL THE LINKS FROM STARTING PAGE
// create a dom object
$dom = new DOMDocument();
@$dom->loadHTML($html);
// run xpath for the dom
$xPath = new DOMXPath($dom);
// get specific elements from the sites
$elements = $xPath->query("//a/@href");
//PARSE EACH LINK
foreach($elements as $e) {
$URLS= file_get_contents($e);
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xPath = new DOMXPath($dom);
$output = $xPath->query("//div[@class='content-entry clearfix']");
echo $output ->nodeValue;
}
?>
对于上面的代码,我得到 警告:file_get_contents() 期望参数 1 是字符串,对象在 ../example.php 第 26 行给出
2)
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_URL, "http://capoeira.com.gr");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$content= curl_exec($curl);
curl_close($curl);
$dom = new DOMDocument();
@$dom->loadHTML($content);
$xPath = new DOMXPath($dom);
$elements = $xPath->query("//a/@href");
foreach ($elements as $e) {
echo $e->nodeValue. "<br />";
}
?>
我没有得到任何结果。我试图回应 $content 然后我得到:
您无权访问此服务器上的 /。
此外,在尝试使用 ErrorDocument 处理请求时遇到 413 Request Entity Too Large 错误...
有什么想法吗? :)
【问题讨论】:
-
您可以将所有内容包装在一个函数中,并对找到的每个链接进行递归调用,但请记住保存访问过的页面以避免无限循环运行
-
显示其中一个链接的内容或布局、开始以及您尝试过的内容。
-
您也可能希望在 file_get_contents 上使用 curl,因为它的速度大约是 curl multi 的两倍
标签: php xpath hyperlink web-crawler