Mục đích: Cần thu thập nhiều hình ảnh chi tiết từ kết quả tìm kiếm như "washing machine", "refrigerator" và tải về máy để có bộ sưu tập hình ảnh chất lượng cao về "tủ lạnh".
Chức năng chương trình: Lấy các liên kết trang chi tiết từ nhiều kết quả tìm kiếm và lưu trữ chúng trong các tệp văn bản trên desktop, ví dụ "washing machine.txt". Sau đó, sử dụng các liên kết này với một công cụ tải xuống như "Bean Download Manager".
Tổng quan chương trình:
Thư viện cần thiết:
webdriver: Điều khiển hành vi của trình duyệt.
By: Dùng để xác định các phần tử trên trang.
time: Thêm độ trễ để đảm bảo trang đã tải xong.
threading: Hỗ trợ hoạt động đồng thời, cho phép vừa lắng nghe người dùng vừa thu thập dữ liệu.
Biến toàn cục:
halt_keyword_search: Biểu thị việc dừng việc thu thập dữ liệu hiện tại cho một từ khóa.
Hàm chức năng:
listen_for_commands: Một luồng chạy nền, lắng nghe lệnh từ người dùng. Khi nhận lệnh 'dừng', biến halt_keyword_search được đặt thành True.
fetch_links_from_behance: Hàm chính thu thập các liên kết từ trang web Behance dựa trên URL và số lượng mục tiêu.
Chương trình chính:
Khởi tạo danh sách từ khóa keywords chứa các từ khóa cần tìm kiếm trên Behance.
Yêu cầu người dùng nhập số lượng liên kết muốn thu thập.
Bắt đầu một luồng chạy nền để lắng nghe lệnh từ người dùng.
Khởi động trình duyệt Chrome.
Với mỗi từ khóa trong danh sách keywords, tạo URL tìm kiếm tương ứng và sử dụng hàm fetch_links_from_behance để lấy liên kết.
Sau khi thu thập đủ liên kết, lưu chúng vào tệp văn bản theo tên từ khóa.
Cuối cùng, đóng trình duyệt Chrome.
Các chức năng chính:
Làm thế nào để tìm các liên kết:
Sử dụng CSS Selector để lọc ra các phần tử có thuộc tính href.
link_elements = browser.find_elements(By.CSS_SELECTOR, ".projectLinkContainer .mainLink")
for element in link_elements:
url = element.get_attribute("href")
Làm thế nào để kéo thêm kết quả:
Sử dụng Selenium để mô phỏng hành vi cuộn trang.
Làm thế nào để thiết lập lệnh lọc:
Nếu số lượng ghi nhận nhỏ hơn số lượng mục tiêu và không có lệnh dừng từ người dùng, tiếp tục lọc.
Lấy gói dữ liệu từ trang web:
browser.get(url)
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
import threading
halt_keyword_search = False
def listen_for_commands():
global halt_keyword_search
while True:
command = input("Nhập 'dừng' để bỏ qua từ khóa hiện tại: ")
if command == 'dừng':
halt_keyword_search = True
def fetch_links_from_behance(browser, url, target_count):
links = set()
browser.get(url)
time.sleep(5)
try:
while len(links) < target_count and not halt_keyword_search:
elements = browser.find_elements(By.CSS_SELECTOR, ".projectLinkContainer .mainLink")
for element in elements:
link = element.get_attribute("href")
if link:
links.add(link)
if len(links) < target_count:
browser.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
except Exception as e:
print(f"Lỗi: {e}")
return list(links)
if __name__ == "__main__":
keywords = ["washing machine", "refrigerator"]
target_links_count = int(input("Nhập số lượng liên kết bạn muốn thu thập: "))
thread = threading.Thread(target=listen_for_commands)
thread.start()
browser = webdriver.Chrome()
try:
for keyword in keywords:
halt_keyword_search = False
search_url = f"https://www.behance.net/search/projects?search={keyword}&field=industrial+design"
links = fetch_links_from_behance(browser, search_url, target_links_count)
filename = f"{keyword}.txt"
with open(filename, 'w', encoding='utf-8') as file:
for link in links:
file.write(link + '\n')
print(f"Đã tìm thấy {len(links)} liên kết và lưu vào '{filename}'.")
if halt_keyword_search:
print(f"Bỏ qua phần còn lại của '{keyword}' theo yêu cầu của người dùng.")
finally:
browser.quit()