【发布时间】:2018-10-23 09:25:51
【问题描述】:
我正在尝试在 Google Business 中获得评论。目标是通过curl获取访问权限,然后从pane.rating.moreReviews标签jsaction获取值。
如何修复下面的代码以获取curl?
function curl($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36');
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
$html = curl("https://www.google.com/maps?cid=12909283986953620003");
$DOM = new DOMDocument();
$DOM->loadHTML($html);
$finder = new DomXPath($DOM);
$classname = 'pane.rating.moreReviews';
$nodes = $finder->query("//*[contains(@jsaction, '$classname')]");
foreach ($nodes as $node) {
$check_reviews = $node->nodeValue;
$ses_key = preg_replace('/[^0-9]+/', '', $check_reviews);
}
// result should be: 166
echo $ses_key;
如果我尝试做var_dump($html);,我会得到:
string(348437) " "
而且这个数字在每次页面刷新时都会发生变化。
【问题讨论】:
-
我认为是因为您在 curl 中使用了
CURLOPT_HEADER标志,该标志在响应中返回 http 标头 -
可能这个页面上的一些内容是通过ajax加载的。
-
你试过 var_dump 的 $html 吗?确保那不是空的。
-
用
var_dump验证$html的实际值。如果是false,则使用curl_strerror(curl_errno($ch))和curl_getinfo($ch)检查错误原因。 -
显然它不是空的——它有 348437 个字符。尝试使用
file_put_contents将其转储到某个文件中。