Tải về toàn bộ ảnh trên facebook


Xin chào mọi người, đây là bài hướng dẫn làm thế nào để tải toàn bộ hình ảnh từ một tài khoản facebook bất kỳ. Trong bài viết này mình sẽ dùng một thư viện đơn giản và rất quen thuộc trong lập trình web application với python - thư viện request.

Nếu các bạn chưa cài đặt Python, xem các bước cài đặt tại đây.

Đầu tiên, tạo thư mục mới và mở thư mục bằng PyCharm. Tạo file main.py trong thư mục này. Khi đã tạo xong, tiến hành cài đặt thư viện request, thực hiện lệnh sau trong cửa sổ terminal:

pip install requests

Sau đó, khai báo các thư viện:

import os, re, requests

Để có thể lấy các thông tin sau quá trình đăng nhập, chúng ta sẽ tạo một cookie thay cho quá trình này.

cookies = {
"c_user": "xxxxxxxxxxxxxxxxx",
"xs": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Để lấy được giá trị c_userxs các bạn đăng nhập facebook bằng trình duyệt, nhấn F12, rồi thực hiện theo các lựa chọn phía dưới:

1. Trên trình duyệt Firefox

Sau khi vào công cụ phát triển (F12), các bạn tìm đến thẻ Storage. Tại đây, trong ngăn Cookie sẽ tìm được các giá trị này trong bảng phía dưới:

2. Trên trình duyệt Chromium (Chrome, Microsoft Edge)

Sau khi vào công cụ phát triển (F12), các bạn tìm đến thẻ Application. Tại đây, trong ngăn Cookies sẽ tìm được các giá trị này trong bảng phía dưới:

 Sau khi đã có các giá trị của biến cookie, chúng ta cần ID_user của đối tượng mà chúng ta sẽ lấy hình ảnh. Nếu muốn tải xuống hình ảnh của chính mình thì ID_user này chính là c_user. Thay ID_user vào biến friend_id.

Mẹo: Các bạn có thể tìm được ID_user của bất kì ai bằng cách vào xem ảnh của họ. Ảnh của XYZ có đường dẫn là ./photos_by. Sau đó nhấn vào xem một ảnh bất kỳ, chú ý vào đường dẫn phía thanh địa chỉ có dạng: 

[https://www.facebook.com/photo.php?fbid=xxxxxxxxxxxxxx&set=pb.yyyyyyyyyyyyyyyy.-]

Đoạn xanh lá kia chính là ID_user!

friend_id = "yyyyyyyyyyyyyyyyyy"

Thay các giá trị trên, sau đó chạy chương trình sau:

import os, re, requests

cookies = {
"c_user": "xxxxxxxxxxxxxxxxx",
"xs": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
friend_id = "yyyyyyyyyyyyyyyyyy"


def load_photo(input_url):
req = requests.Session()
offset = 0

while True:
url = "{}{}".format(input_url, offset)
res = req.get(url, cookies=cookies)
html = res.text
match = re.findall(r"/photo.php\?fbid=([0-9]*)&", html)
if match:
for m in match:
f = open("{}/{}.jpg".format(friend_id, m),"wb")
res = req.get("https://mbasic.facebook.com/photo/view_full_size/?fbid={}".format(m), cookies=cookies)
html = res.text
z = re.search(r"a href=\"(.*?)\"", html)
if z:
url = str(z.groups()[0]).replace("&", "&")
res = req.get(url, cookies=cookies)
f.write(res.content)
f.close()
else:
break
offset+=12
print(offset)
else:
break


if __name__ == "__main__":
if not os.path.exists(friend_id):
os.makedirs(friend_id)

url_photo_tag = "https://mbasic.facebook.com/{}/photoset/pb.{}.-2207520000../?owner_id={}&offset=".format(friend_id, friend_id, friend_id)
url_photo_upload = "https://mbasic.facebook.com/{}/photoset/t.{}/?owner_id={}&offset=".format(friend_id, friend_id, friend_id)

load_photo(url_photo_tag)
load_photo(url_photo_upload)


Chờ cho chương trình quét hết các ảnh của user đó, hình ảnh sẽ được lưu vào thư mục cùng địa chỉ với file chương trình. Have fun!