我正在使用curl进行网页抓取以获取一个linkedin个人资料页面。如果我们尝试从此公共网址(http://in.linkedin.com/in/ratneshdwivedi)中提取数据,那么它正在运行。当我登录到linkedin并尝试从此URL(http://www.linkedin.com/profile/view?id=77597832&locale=en_US&trk=tyah2&trkInfo=tas%3Aravi%20kant%20mishra%2Cidx%3A1-1-1)收集数据时,它无法正常工作,而是返回空白数据。
以下是我的源代码:
$html= $this->_getScrapingData ('http://in.linkedin.com/in/ratneshdwivedi',10);
preg_match("/<span class=\"full-name\">(.*)<\/span>/i", $html, $match);
private function _getScrapingData($url,$timeout) {
$ch = curl_init($url); // initialize curl with given url
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); // set useragent
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // write the response to a variable
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // follow redirects if any
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); // max. seconds to execute
curl_setopt($ch, CURLOPT_FAILONERROR, 1); // stop when it encounters an error
return @curl_exec($ch);
}
提前致谢
答案 0 :(得分:2)
您的脚本未使用与浏览器相同的Cookie。您需要先使用脚本浏览登录表单。
使用
CURLOPT_COOKIEJAR
CURLOPT_COOKIEFILE
通过您的请求保留Cookie。
答案 1 :(得分:1)
您的脚本是否经过身份验证?
您链接的页面只能在登录后查看,这可以解释为什么您的脚本返回空数据,因为重定向的登录页面上不存在全名span类。
您可能还想查看http://developer.linkedin.com/documents/profile-api,因为除了抓取页面之外,还有更好的方法可以实现此目的。
答案 2 :(得分:1)
我认为问题在于您已登录浏览器(我猜您的浏览器中包含一些会话ID的cookie)但是当您致电curl
时,它对您的Cookie一无所知。
解决方案是首先使用您的凭据调用登录请求,并从linkedin保存收到的cookie。然后使用适当的cookie调用所需的所有请求。只是谷歌如何通过PHP curl
发送cookie,我相信有人之前会问过这个问题。
顺便说一句,我认为linkedin有一些你可以使用的API。