XPath表达式在chrome的开发人员工具功能中工作,而不是在我的代码中


XPath expression works in Chrome's developer tools feature and not in my code

我最近开始探索Web爬虫的创建。我选择使用PHP并没有什么特别的原因。在DOMXpath中的DOMDocument中获得了cURL实例的turducken。我很高兴地发现使用XPath非常简单。

不幸的是,尽管它的完美记录当我在Chrome的开发人员工具功能中使用它时,它并不总是在我的代码中返回结果。相同的表达式将在前一种环境中起作用,而在后一种环境中不起作用。

举一个具体的例子,我不能把我的爪子放在YouTube页面视频下面的标题上。

我的问题:为什么XPath表达式可以在Chrome的开发人员工具功能中返回结果,并且在我的代码中除了零之外什么都没有?以下是我的东西和我尝试过的一些表达:

<?php
  $ch = curl_init("https://www.youtube.com/watch?v=SIPGkrlM3R8");
  curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
  $curl = curl_exec($ch);
  $dom = new DOMDocument();
  @$dom->loadHTML($curl);
  $xpath = new DOMXpath($dom);

  $results = $xpath->query("//span[@id='eow-title']");
  //$results = $xpath->query("/html/body/div[2]/div[3]/div/div[5]/div/div[1]/div/div[1]/div[2]/div[1]/h1/span");
  foreach ($results as $result) {
    print_r($result->nodeValue . "<br>");
  }
?>

您已经在正确的轨道上了(无论如何,您的目标元素是正确的)。用(string):

进行类型转换
$contents = file_get_contents("https://www.youtube.com/watch?v=SIPGkrlM3R8");
$dom = new DOMDocument();
@$dom->loadHTML($contents);
$xpath = new DOMXpath($dom);
$results = trim((string) $xpath->query("//span[@id='eow-title']")->item(0)->nodeValue);
echo $results; // Scraping Websites with PHP using DOMXpath and DOMDocument Part 2: Building an XPath Class
<<p> 样本演示/strong>