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:
- http://www.facebook.com/100004210542493
- http://www.facebook.com/100000802680038
- http://www.facebook.com/100001200731989
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!
Irgendein Glück? Ich habe auch Dinge versucht, aber gescheitert. – xxbinxx