2013-09-27 7 views
6

Ich habe seit mehreren Tagen (erfolglos) versucht, Städte von etwa 500 Facebook URLs zu kratzen. Allerdings behandelt Facebook seine Daten auf eine sehr seltsame Art und Weise und ich kann nicht herausfinden, was unter der Haube passiert, um zu verstehen, was ich tun muss.Scraping Daten von Facebook mit Python

Im Wesentlichen ist das Problem, dass Facebook sehr unterschiedliche Datenmengen anzeigt, je nachdem, wer angemeldet ist, und was die Privatsphäre-Einstellungen des Kontos sind. Zum Beispiel, versuchen Sie die folgenden drei Links zu öffnen, die beide in einem Browser, wo Sie bei Facebook angemeldet sind, und eine, wo man nicht:

Wie Sie können sehen, dass Facebook die Daten in beiden Fällen für den ersten Link lädt, aber nur Daten für den zweiten Link erhält, wenn Sie eingeloggt sind (auf ein beliebiges Konto). Der dritte Link zeigt die Stadt an, wenn Sie angemeldet sind, zeigt jedoch nur dann andere Informationen an, wenn Sie nicht angemeldet sind.

Der Grund, warum dies äußerst problematisch ist (und mit Python verwandt ist) ist, dass wenn ich versuche, die Seite mit Beautiful Soup oder Mechanize zu kratzen, kann ich nicht herausfinden, wie das Programm "vortäuschen", dass ich in einem Konto angemeldet bin . Dies bedeutet, dass ich Daten von der ersten Art von Verbindung (von denen es weniger als 10 gibt) leicht erfassen kann, aber ich kann Stadt vom zweiten oder dritten Typ nicht abholen. Bis jetzt habe ich eine Reihe von Lösungen mit wenig Erfolg ausprobiert.

Hier einiger Beispielcode, der richtig für die erste Art funktioniert, aber nicht für andere Typen:

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 

Ich habe auch eine Version, die schöne Suppe verwendet. Wenn jemand irgendwelche Ideen hat, wie man das umgehen kann, wäre ich sehr dankbar. Vielen Dank!

+0

Irgendein Glück? Ich habe auch Dinge versucht, aber gescheitert. – xxbinxx

Antwort

12

Die richtige Weg dies zu tun ist, die Facebook API zu verwenden. Aus verschiedenen Geschäfts-, Sicherheits- und Datenschutzgründen gehen sie große Anstrengungen aus, um die Scraping-Daten knifflig zu machen.

Wenn Sie auf Kratzen bestehen, würde ich versuchen, mich zuerst mit mechanize anzumelden, um das Formular einzureichen. Ich habe nie versucht, dies mit Facebook zu tun, aber viele Websites haben leichter zu parsen Versionen für mobile Benutzer auf m.site.com.

+0

Soweit ich sagen kann Facebook erlaubt es Ihnen nicht auf die Stadt eines Benutzers zuzugreifen, es sei denn der Benutzer ausdrücklich erlaubt Ihnen zu. Weißt du, wie das geht oder müsste ich Zugang von allen verlangen? – cscanlin

+6

_ "facebook erlaubt es Ihnen nicht, auf die Stadt eines Benutzers zuzugreifen, es sei denn, der Benutzer erlaubt Ihnen dies ausdrücklich." _ - Ja, es heißt _privacy_, bitte lesen Sie es nach. _ "Weißt du, wie das geht?" - also fragen Sie explizit, wie Sie die Privatsphäre eines Benutzers schützen können ...? – CBroe

+0

Es ist urkomisch und ein bisschen schmerzhaft, diese Frage Jahre später zurückzuverfolgen. Wie auch immer ich gerade realisiert habe, dass ich nie eine Antwort angenommen habe, und das ist die beste Antwort auf die Frage. Danke, dass du einem fehlgeleiteten Noobie hilfst! – cscanlin

15

Sie sollten mit facepy von Johannes Gorset suchen. Er hat einen brillanten Job gemacht. Ich habe es benutzt, als ich an einer kleinen Facebook-App für ein persönliches Projekt gearbeitet habe.

+1

Irgendein Glück beim Scraping von Seiten sowie Gruppen in Facebook? :-) – Nabin

+0

Hast du facepy vs facebook-sdk verglichen? Ich versuche gerade die beste Bibliothek zu wählen .. –

1

Sie können versuchen, Selen und Facebook API zu verwenden. Ich musste auch einige ähnliche Daten aus der Liste der Test-Facebook-Konten schaben und selen webdriver half dabei, als echte Nutzer zu emulieren und die benötigten Daten zu scrappen.

2

Ich denke, Daten von Facebook zu scannen ist illegal. Es ist dort in Bezug auf die Verwendung von Facebook. Jede Aktivität wird mit Ihren Login-Daten registriert, auch wenn Sie einen Bot zum scrapen verwenden. Wenn sie erwischt werden, können sie dich daran hindern, Facebook für dein Leben zu nutzen. Wenn eine potenzielle Bedrohung für einen Vermögenswert besteht, den Sie möglicherweise darstellen, kann er Sie weiter bestrafen.