2013-09-27 22 views
6

Próbowałem od kilku dni (bezskutecznie) zeskanować miasta z około 500 adresów URL Facebooka. Jednak Facebook przetwarza swoje dane w bardzo dziwny sposób i nie mogę zrozumieć, co dzieje się pod maską, aby zrozumieć, co muszę zrobić.Skrobanie danych z Facebooka za pomocą Pythona

Zasadniczo problem polega na tym, że Facebook wyświetla bardzo różne ilości danych w zależności od tego, kto jest zalogowany i jakie są ustawienia prywatności konta. Na przykład, spróbuj otworzyć trzy poniższe linki, zarówno w przeglądarce, gdzie jesteś zalogowany na Facebooku, a jeden, gdzie nie są:

jako widać, Facebook ładuje dane w obu przypadkach dla pierwszego linku, ale pobiera tylko dane dla drugiego linku, jeśli jesteś zalogowany (na DOWOLNE konto). Trzecie łącze wyświetla miasto po zalogowaniu, ale wyświetla tylko inne informacje, gdy nie jesteś zalogowany.

Powodem, dla którego jest to bardzo problematyczne (i związane z Pythonem) jest to, że próbując zeskrobać stronę za pomocą Beautiful Soup lub Mechanize, nie mogę wymyślić, jak sprawić, aby program "udawał", że jestem zalogowany na konto . Oznacza to, że mogę łatwo pobrać dane z pierwszego typu linku (z którego jest mniej niż 10), ale nie mogę uzyskać miasta z drugiego lub trzeciego typu. Do tej pory próbowałem wielu rozwiązań z niewielkim sukcesem.

Oto niektóre przykładowy kod, który działa prawidłowo dla pierwszego typu, ale nie dla innych typów:

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 

Mam też wersję, która używa Piękne zupy. Jeśli ktoś ma jakieś pomysły na obejście tego, byłbym bardzo wdzięczny. Dziękuję Ci!

+0

Powodzenia? Próbowałem też rzeczy, ale nie udało mi się. – xxbinxx

Odpowiedz

12

Aby to zrobić, należy użyć interfejsu API facebook. Ze względu na różne kwestie związane z biznesem, bezpieczeństwem i prywatnością starają się, aby dane dotyczące skrobania były trudne.

Jeśli nalegasz na skrobanie, spróbuję zalogować się najpierw za pomocą mechanizmu, aby przesłać formularz. Nigdy nie próbowałem tego zrobić z Facebookiem, ale wiele stron internetowych łatwiej analizować wersje przeznaczone dla użytkowników mobilnych na stronie m.site.com.

+0

o ile mogę powiedzieć, że Facebook nie pozwala na dostęp do miasta użytkownika, chyba że użytkownik na to zezwala. Czy znasz jakiś sposób na ten temat, czy musiałbym prosić o dostęp do nich wszystkich? – cscanlin

+6

_ "facebook nie zezwala na dostęp do miasta użytkownika, chyba że użytkownik wyraźnie na to pozwala." _ - tak, to się nazywa _privacy_, proszę sprawdzić. _ "Czy znasz jakiś sposób" - więc wyraźnie pytasz, jak _violować_ prywatność użytkownika ...? – CBroe

+0

To zabawne i bolesne spojrzenie na to pytanie po latach. W każdym razie właśnie uświadomiłem sobie, że nigdy nie przyjąłem odpowiedzi i jest to najlepsza odpowiedź na to pytanie. Więc dziękuję za pomoc błędnemu nowicjuszowi! – cscanlin

15

Powinieneś sprawdzić, używając facepy przez Johannes Gorset. Zrobił świetną robotę. Używałem go, kiedy pracowałem przy niewielkiej aplikacji na Facebooku dla osobistego projektu.

+1

Masz szczęście na skrobanie ze stron, a także grup na facebooku? :-) – Nabin

+0

Czy porównać facepy vs facebook-sdk? Próbuję wybrać najlepszą bibliotekę w tej chwili .. –

1

Możesz spróbować użyć selenu i interfejsu API Facebooka. Musiałem również zeskrobać trochę podobnych danych z listy testujących konta na Facebooku, a selenowy webdriver pomógł emulować jako prawdziwy użytkownik i zeskrobać wymagane dane.

2

Myślę, że skrobanie danych z Facebooka jest nielegalne. Jest tam w warunkach korzystania z Facebooka. Każde działanie jest rejestrowane przy użyciu danych logowania, nawet jeśli używasz bota do skrobania. Jeśli zostaną złapani, mogą zakazać ci korzystania z Facebooka na całe życie. Jeśli istnieje potencjalne zagrożenie dla dowolnego zasobu, który możesz stwarzać, mogą cię dalej karać.

Powiązane problemy