gpt4 book ai didi

php - 抓取一个网站,获取链接,用PHP和XPATH抓取链接

转载 作者:可可西里 更新时间:2023-11-01 12:52:33 25 4
gpt4 key购买 nike

我想抓取整个网站,我已经阅读了几个主题,但我无法在第 2 级获取数据。

也就是说,我可以从起始页返回链接,但是我找不到解析链接和获取每个链接内容的方法...

我使用的代码是:

<?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?

?>

有人能帮我举个例子吗?

我将不胜感激!


好的,谢谢您的回答!我尝试了一些东西,但我还没有得到任何结果 - 我是编程新手..

在下面,您可以找到我的两次尝试 - 第一次尝试解析链接,第二次尝试用 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 为字符串,第 26 行 ../example.php 中给出的对象

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 错误...

有什么想法吗?? :)

最佳答案

您可以尝试以下操作。参见 this thread了解更多详情

<?php
//set_time_limit (0);
function crawl_page($url, $depth = 5){
$seen = array();
if(($depth == 0) or (in_array($url, $seen))){
return;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$result = curl_exec ($ch);
curl_close ($ch);
if( $result ){
$stripped_file = strip_tags($result, "<a>");
preg_match_all("/<a[\s]+[^>]*?href[\s]?=[\s\"\']+"."(.*?)[\"\']+.*?>"."([^<]+|.*?)?<\/a>/", $stripped_file, $matches, PREG_SET_ORDER );
foreach($matches as $match){
$href = $match[1];
if (0 !== strpos($href, 'http')) {
$path = '/' . ltrim($href, '/');
if (extension_loaded('http')) {
$href = http_build_url($href , array('path' => $path));
} else {
$parts = parse_url($href);
$href = $parts['scheme'] . '://';
if (isset($parts['user']) && isset($parts['pass'])) {
$href .= $parts['user'] . ':' . $parts['pass'] . '@';
}
$href .= $parts['host'];
if (isset($parts['port'])) {
$href .= ':' . $parts['port'];
}
$href .= $path;
}
}
crawl_page($href, $depth - 1);
}
}
echo "Crawled {$href}";
}
crawl_page("http://www.sitename.com/",3);
?>

关于php - 抓取一个网站,获取链接,用PHP和XPATH抓取链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com