我已经尝试了几天(未成功)从大约 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 的版本。如果有人对如何解决这个问题有任何想法,我将不胜感激。谢谢!