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

时间:2019-03-01 08:33:56

标签: php

我想从另一个网站打开一个页面,并提取此页面div of class="layout-2-2"中的所有链接(href)。如何使用PHP做到这一点?

我想复制this网页的layout-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);

4 个答案:

答案 0 :(得分:4)

使用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);

答案 1 :(得分:0)

代码看起来不错,但是我猜您正在体验它不起作用。

如果是这样,则可能与以下事实有关:当今的内容未存储在着陆页中(您正在抓取),而是随后通过JavaScript AJAX调用由页面请求。这样就不会被简单的file_get_contents()捕获。

这有点像您去毒贩那里买毒品,他在购买时可能没有毒品,而是在您给他钱来给您带来货物后打电话给另一个人。因此,抢劫经销商以获得毒品,可能不会产生您想要的结果。

正如您正在尝试的那样,Web抓取是一门艺术,您最好使用现成的软件包而不是尝试自己重新发明轮子。即便如此,许多网站还是保护自己免受经常尝试进行链接盗窃的侵害。

答案 2 :(得分:0)

您可以使用简单的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>";

答案 3 :(得分:-1)

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

但是您可以使用cURL进行此提议,cURL的工作就像对URL的Web请求一样,并将整个html作为字符串返回。