使用wget下载Facebook个人资料/好友页面

7
我正在尝试使用 "wget" 获取 Facebook 用户的个人资料页面,但一直得到一个与该特定用户无关的非个人资料页面,名为 "browser.php"。在浏览器中查看的个人资料页面的 URL 格式如下:

http://www.facebook.com/user-name

这就是我一直在使用作为wget命令的参数:

wget http://www.facebook.com/user-name

我也想使用wget来获取用户的朋友列表,但结果却相同且无用("browser.php"):

wget http://www.facebook.com/user-name?sk=friends&v=friends

请问有人能告诉我我错在哪里吗?换句话说,我是否遗漏了某些wget命令的关键选项或者wget根本不适合这种情况?

非常感谢任何帮助。

为了更好地理解这个问题,我需要弄清楚如何使用wget从Facebook获取这些页面,因为它会帮助我编写一个脚本/程序来查找HTML源代码中朋友的个人资料URL,然后在其中查找其他关键字等。我基本上希望这可以帮助我进行一些与我没有联系的人的选择性爬取(当然要得到Facebook的许可)。

6个回答

2
首先,Facebook可能已经创建了一种情况,使得某些用户代理(例如wget)无法爬取页面。因此,他们会将某些用户代理重定向到不同的页面,该页面可能会显示类似于“您的浏览器不受支持”的内容。他们这样做是为了保护人们免受您正在做的事情的影响。但是,您可以使用-U参数告诉wget将自己标识为不同的代理(请阅读wget手册)。例如:wget -U Mozilla http://.... 其次,Facebook的隐私设置很少允许您在未登录用户的情况下阅读任何/大量信息,可能仅限于作为您尝试爬取的个人资料的朋友的用户。
第三,有一个Facebook API,您需要使用它来爬取和提取Facebook上的信息——如果您尝试以任何其他方式获取信息,则可能违反可接受使用政策。

如果一个不在我的社交网络中的人公开发布她的朋友列表,那么从Facebook的角度来看,这仍然是私人信息吗? - rogerchucker
我最初考虑使用Facebook API(具体来说是Graph API),但似乎所有朋友的信息都需要访问令牌,而我想以不引人注目的方式完成这个任务。即使这只是严格的学术研究,这是否会违反Facebook的政策? - rogerchucker
通过Facebook API获取Facebook数据的一般规则很简单--如果您可以通过Facebook API获取它,那么它要么是您已被授权访问的数据,要么是公共数据。大多数Facebook API都允许您请求用户数据,API将返回您请求的数据您被允许查看的数据。因此,当处理Facebook数据时,您的应用程序应该构建得能够接受返回类似请求的数据无数据。 - Soren
@user611846 -- 我不确定Facebook在何处认为这违反了其服务条款(我与Facebook无关),但我相信他们正在寻找异常行为模式,并根据自己的判断做出反应。然而,许多公司确实希望支持学术研究,并且他们通常会有此类计划,在那里他们将制定合同条件,并可能授予您对某些匿名数据的访问权限--如果这真的是为了学术研究,那么为什么不直接联系Facebook并询问他们是否有这样的计划呢? - Soren

1

请查看以下开源项目:

  • facebook-cli,它是一个与Facebook API交互的命令行实用程序。
  • facebook-friends,可以生成包含您所有Facebook好友信息的HTML页面。

1

如果您想保存已登录的页面,可以使用Firefox登录并选择“保持登录状态”,然后将这些cookie复制到文件中,并使用cookiejar选项。您仍将拥有相当多的动态脚本加载内容,WGET无法保存。

有很多方法可以解决这个问题。如果您需要提取特定项目,请查看API。如果您只是想归档页面的快照,就像在Web浏览器中一样,请尝试CutyCapt。它很像wget,但会解析整个文档,就像Web浏览器一样,并存储页面的图像。


1

我不知道为什么你要使用wget,Facebook提供了一个很好的API。

wget --user-agent=Firefox http://www.facebook.com/markzuckerberg

将公开可用的内容保存到文件中。

您应该考虑使用他们的API。

Facebook开发者


谢谢Krish。不幸的是,这并不起作用,因为它给我一个文件(其中文件名是用户名),该文件没有信息。此外,如果我通过更改用户代理来“欺骗”Facebook,那么在寻求爬行的真实许可时,Facebook实际上会反对吗(因为这是我的最终目标)?我正在尝试使用wget,因为我不知道其他任何东西。任何其他建议也将非常有帮助 - 我正在寻找任何可以从脚本或程序中工作的东西。 - rogerchucker
1
Krish,Facebook API 要求访问每个用户的访问令牌,才能获取其个人资料。这在非侵入式数据收集中是不切实际的。 - rogerchucker

0

如果你想使用 wget 下载 Facebook 页面,你可以在浏览器中使用 Chrome DevTools (也适用于 Firefox、Opera 等)。

首先,在 Network 标签页中把页面转换为 curl 命令(如果需要请刷新页面或勾选 Preserve log),找到你感兴趣的页面(你可以筛选列表),右键点击请求/页面,然后选择 Copy as cURL。然后将命令粘贴到终端中。

要从 curl 格式转换为 wget,请进行以下转换:

  • 删除 --compress 参数,
  • 在所有位置将 -H 更改为 --header

还需考虑添加以下 wget 参数:

  • -k--convert-links,将文档中的链接转换为适合本地查看的格式。
  • -p--page-requisites,下载所有必要的文件以正确显示页面。

另请参阅:


0

您可以轻松地重复使用Firefox的cookies进行登录,具体请参见:

谁可以看到您的好友列表是可配置的,因此如果有人将其配置为仅限好友,则无法提取该信息。

此外,我建议使用移动站点,它使用分页而不是AJAX加载,并且具有更简单、更小的HTML:https://m.facebook.com/USER/friends?startindex=24

这里是(非常严格的)抓取条款:https://www.facebook.com/apps/site_scraping_tos_terms.php


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接