Hello !

Python là một ngôn ngữ rất dễ dành cho người mới bởi cú pháp và tính năng phong phú của nó. Chỉ sao một thời gian rất ngắn bạn có thể tự viết những chương trình khá hay ho, và sau đây là hướng dẫn crawl ảnh gái xinh từ trang Gái xinh chọn lọc của boss Long - J2team

Chuẩn bị

Trước hết bạn cần cài thư viện Requests để get data, nếu máy bạn chưa cài, mở command line lên và chạy lệnh sau :

pip install requests

Tiếp tục là cài thư viện BeautifulSoup để xử lí HTML :

pip install beautifulsoup4

Okay vậy là xong, chiến thôi !

Bắt đầu

Trước tiên , ta sẽ thử tạo một request đến gaixinhchonloc.com .

import requests
from bs4 import BeautifulSoup
r = requests.get("https://gaixinhchonloc.com/")
print(r.text)

Vậy là thành requests thành công rồi =)).

Bây giờ ta sẽ vào trang gái xinh chọn lọc xem qua source code.

Xem qua có thể thấy nó chèn ảnh trong các div có class gridphoto và ở đây có nhiều link ảnh đã được crop, giờ ta sẽ get link ảnh full trong attr data-photo-high .

Sử dụng BeautifulSoup để tìm tất cả các div như trên :

Sau khi lấy được các div trên, ta có thể dễ dàng get url như sau :

Coi như vậy là xong. Rất tiếc là trang này yêu cầu scrool page mới load ảnh tiếp vì vậy chỉ với BeautifulSoup thì không thể crawl hết được. Vì vậy để crawl tất cả image link thì ta cần sử dụng bổ trwoj thêm các thư viện khác. Hiện tại mình sẽ dừng lại ở đây thôi và có thể sẽ có bài hưỡng dẫn khác để crawl tất cả ảnh, giờ thì vô link xem thành quả thôi :))

Good ! Ta sẽ viết tiếp code để lưu ảnh về. Ta dùng hàm split để get name file dùng để lưu .

Cuối cùng ghi vào file thôi :D.

Hoàn thành

Như vậy là đã viết xong một chương trình đơn giản để crawl ảnh và lưu về máy. Nếu có phần sau, mình sẽ hưỡng dẫn crawl toàn bộ ảnh ở site này :D

Đây là file code đã hoàn thành :

import requests
from bs4 import BeautifulSoup
r = requests.get("https://gaixinhchonloc.com/")
content = BeautifulSoup(r.text, "html.parser")
targetContent = content.find_all("div","gridphoto")
for item in targetContent:
    imgLink = item["data-photo-high"]
    fileName = imgLink.split('/')[-1]
    img = requests.get(imgLink, stream=True).content
    open(fileName, "wb").write(img)