使用Python从Facebook刮痧数据

csc*_*lin 7 python facebook mechanize beautifulsoup web-scraping

我已经尝试了几天(不成功)从大约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
Run Code Online (Sandbox Code Playgroud)

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

Roh*_*hit 15

你应该考虑使用facepy约翰内斯Gorset.他做得非常出色.我在一个小型Facebook应用程序上为个人项目工作时使用它.


Jam*_*son 13

正确的做到这一点的方法是使用Facebook的API.出于各种商业,安全和隐私原因,他们会尽力使抓取数据变得棘手.

如果您坚持抓取,我会尝试首先使用mechanize登录以提交表单.我从来没有试过用Facebook做这个,但很多网站都更容易解析m.site.com上针对移动用户的版本.

  • _"Facebook并没有允许你访问用户的城市,除非用户明确允许你这样做." _ - 是的,这就是所谓的_privacy_,请关注一下吧._"你知道有什么方法吗?" - 所以你明确要求如何_violate_用户的隐私......? (7认同)