Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中获取div中的所有链接_Php - Fatal编程技术网

如何在PHP中获取div中的所有链接

如何在PHP中获取div中的所有链接,php,Php,我想从另一个网站打开一个页面,并提取该页面class=“layout-2-2”的div中的所有链接(href)。如何使用PHP实现这一点 我想复制网页布局-2-2中的每个链接 这是我的实际代码 $doc = file_get_contents('https://url/'); $xpath = new DOMXpath($doc); $liens1= $xpath->query('//div[@class="layout-2-2"]'); $links =

我想从另一个网站打开一个页面,并提取该页面class=“layout-2-2”的
div中的所有链接(href)。如何使用PHP实现这一点

我想复制网页布局-2-2中的每个链接

这是我的实际代码

    $doc = file_get_contents('https://url/');
    $xpath = new DOMXpath($doc);
    $liens1= $xpath->query('//div[@class="layout-2-2"]');
    $links = [];
    foreach($liens1 as $lien1) {
      $arr = $lien1->getElementsByTagName("a");
      foreach($arr as $item) {
        $href =  $item->getAttribute("href");
        $text = trim(preg_replace("/[\r\n]+/", " ", $item->nodeValue));
        $links[] = $href;
      }
    }
    echo($links);

出于安全原因,您不能使用文件获取内容从外部URL获取内容


但是您可以使用cURL来实现这个提议,cURL的工作方式类似于对URL的web请求,并将整个html作为字符串返回。

代码似乎很好,但我猜您正在体验它不起作用

如果是这样的话,这可能与以下事实有关:现在的内容不是存储在登录页(您正在抓取)中,而是随后由页面通过JavaScript AJAX调用进行请求。因此,将不会被简单的文件\u get\u contents()捕获

这有点像如果你去从一个毒贩那里买毒品,他可能在买毒品的时候身上没有毒品,而是在你给他钱后打电话给另一个人给你带来货物。因此,抢劫毒品贩子,可能不会产生你想要的结果


正如你正在尝试的那样,网络抓取是一门相当艺术,你最好使用现成的软件包,而不是自己重新发明轮子。即使如此,许多网站也能保护自己免受经常试图窃取链接的行为。

使用xpath查询:
//div[@class=\“layout-2-2\”]//a/@href
获取父节点、子节点和子节点属性

$html = file_get_contents('https://url/');
$links = [];
$document = new DOMDocument;
$document ->loadHTML($html);
$xPath = new DOMXPath($document );
$anchorTags = $xPath->evaluate("//div[@class=\"layout-2-2\"]//a/@href");
foreach ($anchorTags  as $anchorTag) {
    $links[] = $anchorTag->nodeValue;
}
print_r($links);

您可以使用simple
foreach
获取特定
div
标记内的所有链接

    //find all a tags that have a href in the div abcde

    $hrefDetails = $html->find('div[@class="layout-1-1"]', 0);
    $linkArray = array();

    foreach($hrefDetails->find('a[href]') as $link){
        array_push($linkArray, $link);
    }

   //print result here

    echo "<pre>";
    print_r($linkArray);
    echo "</pre>";
//查找div abcde中包含a href的所有a标记
$hrefDetails=$html->find('div[@class=“layout-1-1”]”,0);
$linkArray=array();
foreach($hrefDetails->find('a[href]')作为$link){
array\u push($linkArray,$link);
}
//在这里打印结果
回声“;
打印(链接数组);
回声“;

您能解释一下给定代码的具体错误吗?您能提供html示例吗?链接是如何嵌套在该div中的?
file\u get\u contents
在配置
allow\u URL\u fopen
时,可以在远程
URL
上使用
@这可能是问问题的用户的问题!请注意,
allow\u url\u fopen
allow\u url\u include