Navigate back to the homepage

Crawl ảnh sử dụng Requests và BeautifulSoup

Quang Thắng
November 15th, 2019 · 1 min read

Hello !

Đây là bài hướng dẫn viết một chương trình crawl ảnh đơn giản. Trong quá trình đọc nếu thấy sai sót gì mong bạn đọc bỏ qua !

Bắt đầu

Target của chúng ta trong bài này là Gái xinh chọn lọc của boss Long - J2TEAM Trước tiên cần cài các thư viện cần thiết, đầu tiên là requests:

1pip install requests

Tiếp tục cài bs4:

1pip install beautifulsoup4

Vậy là chuẩn bị xong! Đầu tiên, ta sẽ thử requests đến target như sau :

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

Nếu chương trình in ra source code của web thì sẽ thành công.

Giờ ta sẽ xem qua source của trang Gái xinh chọn lọc.

Như vậy là trang này host bằng Tumblr và các image được chứa trong div có class gridphoto. Div này gồm nhiều attr chứa link ảnh, để ý một chút sẽ thấy attr data-photo-high có value là link ảnh chất lượng cao, vậy ta sẽ get value trong attr này. Dùng BeautifulSoup để tìm các div có class gridphoto ta sẽ được kết quả như sau :

Tiếp theo ta chỉ việc get url trong attr data-photo-high:

Lưu ý rằng trang này yêu cầu scroll xuống mới load ảnh tiếp vì vậy khi ta request chỉ lấy được ảnh load khi mới vào trang :(( Xem thử một link xem chuẩn chưa :V

Wow :D. Bây giờ ta sẽ lưu ảnh get được. Trước hết split url để lấy tên file ảnh:

Tới đây chỉ việc lưu lại là xong.

Hoàn thành

Đây là một chương trình rất đơn giản tuy nhiên chưa thể get toàn bộ ảnh từ trang này. Tuy nhiên ta có thể dùng một số thư viện khác như selenium,… để giúp ta làm việc này. Đây là source code chương trình hoàn thiện:

1import requests
2from bs4 import BeautifulSoup
3r = requests.get("https://gaixinhchonloc.com/")
4content = BeautifulSoup(r.text, "html.parser")
5targetContent = content.find_all("div","gridphoto")
6for item in targetContent:
7 imgLink = item["data-photo-high"]
8 fileName = imgLink.split('/')[-1]
9 img = requests.get(imgLink, stream=True).content
10 open(fileName, "wb").write(img)
© 2019 sgorki
Link to $facebookLink to $github