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