我正在尝试在Facebook页面上获取第一批图像。它适用于其他网站 - 使用:
$image = $doc->getElementsByTagName('img')->item(0);
但出于某种原因,Facebook已经包含了我需要的东西,就像这样:
<code class="hidden_elem" id="u_0_7"><!-- <div class="timelineLoggedOutSignUp"><div class="_5h60" id="pagelet_loggedout_sign_up" data-referrer="pagelet_loggedout_sign_up"></div></div><div class="fbTimelineTopSectionBase fbTimelineLoggedOutTopSection"><div class="_5h60" id="pagelet_above_header_timeline" data-referrer="pagelet_above_header_timeline"></div><div id="above_header_timeline_placeholder"></div><div class="fbTimelineSection mtm fbTimelineTopSection"><div id="fbProfileCover"><div class="cover" id="u_0_4"><a class="coverWrap coverImage" href="https://www.facebook.com/photo.php?fbid=632540440113248&set=a.540825239284769.1073741827.540818775952082&type=1" rel="theater" ajaxify="https://www.facebook.com/photo.php?fbid=632540440113248&set=a.540825239284769.1073741827.540818775952082&type=1&src=https%3A%2F%2Fscontent-b.xx.fbcdn.net%2Fhphotos-ash3%2F579116_632540440113248_872174037_n.png&size=851%2C315&source=10" title="Coverbillede" id="fbCoverImageContainer"><img class="coverPhotoImg photo img" src="https://scon
请注意,它包含在:<!-- -->
。
有什么方法可以避免这种情况吗?也许将用户代理更改为较旧的浏览器,他们不使用<!-- -->
包装?我可以在我的CURL设置中使用CURLOPT_USERAGENT
来执行此操作。
有什么想法吗?我在这里迷失了......
答案 0 :(得分:0)
所有这些数据都可以通过Facebook Graph API获得,因此您无需摆弄DOM或刮擦页面 - 您无需进行身份验证即可获取。这意味着您不需要Facebook的SDK,或者如果您只是抓取公共信息,则需要担心注册应用程序。此外,Facebook一直在改变他们的HTML,因此抓取内容会慢慢让你发疯。
下面的快速JS示例,这会获取您网页的封面照片:
$('#GetCoverImage').click(function() {
$.getJSON(
'https://graph.facebook.com/EduKarmaDK',
function(pageData) {
console.log(pageData.cover.source);
}
);
});
pageData对象中提供了有关该页面的其他公共信息。与Graph API Explorer玩游戏,看看还有什么可用。
PHP示例:
<?php
$pageData = json_decode(
file_get_contents('https://graph.facebook.com/EduKarmaDK')
);
echo($pageData->cover->source);