10

我已经尝试了几天(未成功)从大约 500 个 Facebook URL 中抓取城市。然而,Facebook 以一种非常奇怪的方式处理其数据,我无法弄清楚幕后发生了什么,以了解我需要做什么。

本质上,问题在于 Facebook 显示的数据量非常不同,具体取决于登录者以及帐户的隐私设置。例如,尝试在您登录 Facebook 的浏览器和未登录 Facebook 的浏览器中打开以下三个链接:

[由于隐私问题,删除链接]

如您所见,Facebook 在两种情况下都会为第一个链接加载数据,但如果您已登录(任何帐户),则只会获取第二个链接的数据。第三个链接在您登录时显示城市,但在您未登录时仅显示其他信息。

这是非常有问题的(并且与 Python 有关)的原因是,当尝试使用 Beautiful Soup 或 Mechanize 抓取页面时,我无法弄清楚如何让程序“假装”我已登录帐户。这意味着我可以轻松地从第一种类型的链接(其中少于 10 个)中获取数据,但我无法从第二种或第三种类型的链接中获取城市。到目前为止,我已经尝试了许多解决方案,但收效甚微。

这是一些适用于第一种类型的示例代码,但不适用于其他类型:

import mechanize
import re
import csv

user_info = []

fb_url = 'http://www.facebook.com/100004210542493'
br = mechanize.Browser()
br.set_handle_robots(False)

br.open(fb_url)
all_html = br.response().get_data()
print all_html

city = re.search('fsl fwb fcb">(.+?)</a></div><div class="aboutSubtitle fsm fwn fcg', all_html).group(1)

user_info = [fb_url, city]
print user_info

我也有一个使用 Beautiful Soup 的版本。如果有人对如何解决这个问题有任何想法,我将不胜感激。谢谢!

4

4 回答 4

15

您应该考虑使用Johannes Gorsetfacepy 。他做了出色的工作。我在为个人项目开发一个小型 Facebook 应用程序时使用了它。

于 2013-09-27T02:56:43.213 回答
14

正确的方法是使用 facebook API。出于各种业务、安全和隐私原因,他们不遗余力地使抓取数据变得棘手。

如果您坚持抓取,我会尝试先使用 mechanize 登录以提交表单。我从来没有尝试过用 facebook 来做这件事,但是很多网站在 m.site.com 上更容易解析为移动用户准备的版本。

于 2013-09-27T02:54:47.127 回答
4

我认为从 facebook 抓取数据是非法的。它在使用 facebook 的条款中。即使您使用机器人进行抓取,每个活动都会使用您的登录详细信息进行注册。如果被抓到,他们可能会禁止您终生使用 Facebook。如果您可能对任何资产构成潜在威胁,他们可能会进一步惩罚您。

于 2016-06-13T16:46:09.083 回答
1

您可以尝试使用 selenium 和 Facebook API。我还必须从测试 Facebook 帐户列表中抓取一些类似的数据,并且 selenium webdriver 帮助模拟真实用户并抓取所需的数据。

于 2015-03-27T08:24:55.917 回答