XPath表达式适用于Chrome的开发人员工具功能,而不适用于我的代码

时间:2014-07-17 18:11:15

标签: php google-chrome xpath

我最近开始探索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>");
  }
?>

1 个答案:

答案 0 :(得分:2)

您已经走上了正确的道路(无论如何,您都正确地定位了该元素)。使用(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

Sample Demo