如何使用PHP Simple HTML DOM Parser定位内部文章标签?

时间:2015-04-17 19:38:53

标签: javascript php html web-scraping simple-html-dom

我正在尝试从网址中提取数据:http://scores.espn.go.com/nba/scoreboard?date=20150410

<?php
include('simple_html_dom.php');

function dlPage($href) {

$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_URL, $href);
curl_setopt($curl, CURLOPT_REFERER, $href);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.125 Safari/533.4");
$str = curl_exec($curl);
curl_close($curl);

$html= str_get_html($str); 

foreach($html->find(div[id=events]) as $elm){
    var_dump($elm->plaintext);exit;
    // this var_dump is return empty string.
}

return $dom;
}

$url = 'http://scores.espn.go.com/nba/scoreboard?date=20150410';
$data = dlPage($url);
print_r($data);

?>

每当我尝试访问内部文章标签时,我总是得到null或空数组。请帮助我如何访问和提取匹配分数的文章html5标签内的数据。 enter image description here

1 个答案:

答案 0 :(得分:1)

您正在寻找一个div和事件ID。它存在于页面中,但它确实是一个空元素,至少在页面加载时。它使用ajax填充,但是当您使用cURL获取页面时,您将无法获得该信息。或者任何其他不解析页面并执行javascript的方法。

然而,你很幸运。他们正在拨打ajax电话:

http://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboard?calendartype=blacklist&dates=20150410

你可以很容易地做同样的事情。

它会以json字符串的形式获取信息,但在php中使用json_decode很容易解析。之后,您将拥有一个嵌套的对象或数组,您可以随意显示数据。

请注意:我不知道你是否被允许这样做,所以你如何使用它,取决于你。如果他们公开提供API以及条件是什么,您可以尝试在他们的网站上搜索。