2013-09-27 190 views
6

Tôi đã cố gắng vài ngày nay (không thành công) để xóa thành phố khỏi khoảng 500 URL Facebook. Tuy nhiên, Facebook xử lý dữ liệu của nó một cách rất lạ và tôi không thể tìm ra những gì đang xảy ra dưới mui xe để hiểu những gì tôi cần làm.Cạo dữ liệu từ Facebook bằng Python

Về cơ bản vấn đề là Facebook hiển thị số lượng dữ liệu rất khác nhau tùy thuộc vào người đã đăng nhập và cài đặt bảo mật của tài khoản là gì. Ví dụ, hãy thử mở ba liên kết sau đây, cả hai trong một trình duyệt mà bạn đang đăng nhập vào Facebook, và một trong những nơi bạn không phải là:

Như bạn có thể thấy, Facebook tải dữ liệu trong cả hai trường hợp cho liên kết đầu tiên, nhưng chỉ nhận dữ liệu cho liên kết thứ hai nếu bạn đăng nhập (vào bất kỳ tài khoản nào). Liên kết thứ ba hiển thị thành phố khi bạn đăng nhập, nhưng chỉ hiển thị thông tin khác khi bạn không đăng nhập.

Lý do điều này cực kỳ có vấn đề (và liên quan đến Python) là khi cố gắng xóa trang bằng Beautiful Soup hoặc Mechanize, tôi không thể tìm ra cách để chương trình "giả vờ" rằng tôi đã đăng nhập vào tài khoản . Điều này có nghĩa là tôi có thể dễ dàng lấy dữ liệu ra khỏi loại liên kết đầu tiên (trong đó có ít hơn 10), nhưng tôi không thể lấy thành phố ra khỏi loại thứ hai hoặc thứ ba. Cho đến nay tôi đã thử một số giải pháp với ít thành công.

Dưới đây là một số mẫu mã mà làm việc một cách chính xác cho các loại hình đầu tiên, nhưng không phải với nhiều loại khác:

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 

Tôi cũng có một phiên bản sử dụng Beautiful Soup. Nếu bất cứ ai có bất kỳ ý tưởng về cách để có được xung quanh này, tôi sẽ rất biết ơn. Cảm ơn bạn!

+0

Có may mắn không? Tôi cũng đã thử mọi thứ nhưng thất bại. – xxbinxx

Trả lời

12

phải cách để làm điều này là sử dụng API facebook. Vì nhiều lý do kinh doanh, bảo mật và quyền riêng tư khác nhau, chúng không thể thực hiện được việc lừa đảo dữ liệu.

Nếu bạn nhấn mạnh vào việc cạo, tôi sẽ cố gắng đăng nhập trước bằng cách sử dụng cơ giới hóa để gửi biểu mẫu. Tôi đã không bao giờ cố gắng làm điều này với facebook, nhưng rất nhiều trang web đã dễ dàng hơn để phân tích các phiên bản dành cho người dùng di động tại m.site.com.

+0

theo như tôi có thể nói với facebook không cho phép bạn truy cập vào thành phố của người dùng trừ khi người dùng đặc biệt cho phép bạn. Bạn có biết bất kỳ cách nào xung quanh điều này hoặc tôi sẽ phải yêu cầu truy cập từ tất cả chúng? – cscanlin

+6

_ “facebook không cho phép bạn truy cập thành phố của người dùng trừ khi người dùng đặc biệt cho phép bạn.” _ - vâng, nó được gọi là _privacy_, vui lòng tra cứu nó. _ “Bạn có biết bất kỳ cách nào xung quanh vấn đề này không” _ - vì vậy, bạn đang yêu cầu rõ ràng cách thức để _violate_ quyền riêng tư của người dùng…? – CBroe

+0

Thật vui nhộn và hơi đau khi nhìn lại câu hỏi này năm sau đó. Dù sao tôi chỉ nhận ra tôi không bao giờ chấp nhận một câu trả lời, và đây là câu trả lời tốt nhất cho câu hỏi. Vì vậy, cảm ơn vì đã giúp một noobie sai lầm! – cscanlin

15

Bạn nên xem xét sử dụng facepy theo Johannes Gorset. Anh ấy đã làm một công việc tuyệt vời. Tôi đã sử dụng nó khi tôi làm việc trên một ứng dụng Facebook nhỏ cho một dự án cá nhân.

+1

Bất kỳ may mắn trên cạo từ các trang cũng như các nhóm trong facebook? :-) – Nabin

+0

Bạn có so sánh facepy với facebook-sdk không? Tôi đang cố chọn thư viện tốt nhất vào lúc này .. –

1

Bạn có thể thử sử dụng selen và API Facebook. Tôi cũng đã phải cạo một số dữ liệu tương tự từ danh sách kiểm tra tài khoản Facebook và selenium webdriver đã giúp mô phỏng như người dùng thực tế và để cạo dữ liệu cần thiết.

2

Tôi cho rằng việc lấy dữ liệu từ facebook là bất hợp pháp. Nó có trong các điều khoản của việc sử dụng facebook. Mọi hoạt động được đăng ký với chi tiết đăng nhập của bạn, ngay cả khi bạn sử dụng bot để xóa. Nếu bị bắt, họ có thể cấm bạn sử dụng facebook trong suốt cuộc đời của bạn. Nếu có nguy cơ tiềm tàng đối với bất kỳ tài sản nào mà bạn có thể gây ra, họ có thể phạt bạn thêm.