Tùy biến Nâng cao
Cập nhật lần cuối:
Thảo luậnMục lục
Phần này đi sâu vào các tùy chọn cấu hình và kỹ thuật nâng cao để bạn có thể tùy chỉnh vnstock_news phù hợp với nhu cầu cụ thể, cũng như xử lý các tình huống phức tạp hơn.
4.1. Xử lý Sitemap Động và RSS
Một số trang web sử dụng Sitemap hoặc RSS feeds có URL thay đổi theo thời gian (ví dụ: theo tháng, theo số thứ tự). vnstock_news có khả năng xử lý các trường hợp này thông qua DynamicSitemapResolver.
Cấu hình Sitemap Động
Trong vnstock_news/config/sites.py, bạn có thể thấy cấu hình sitemap với các thuộc tính như pattern_type, format, base_url, index_url:
"tuoitre": {
"sitemap": {
"base_url": "https://tuoitre.vn/StaticSitemaps/sitemaps-",
"pattern_type": "monthly", # Loại pattern: monthly, incremental
"format": "{year}-{month}", # Định dạng URL
"extension": "xml",
"current_url": "https://tuoitre.vn/StaticSitemaps/sitemaps-2025-8.xml" # URL hiện tại (sẽ được cập nhật động)
},
# ...
},
"ktsg": {
"sitemap": {
"base_url": "https://thesaigontimes.vn/post-sitemap",
"pattern_type": "incremental",
"index_url": "https://thesaigontimes.vn/sitemap_index.xml", # URL của sitemap index
"extension": "xml",
"current_url": "https://thesaigontimes.vn/post-sitemap156.xml"
},
# ...
}Crawler sẽ tự động sử dụng DynamicSitemapResolver để giải quyết URL Sitemap chính xác tại thời điểm chạy dựa trên các cấu hình này.
Ưu tiên RSS
Khi bạn gọi Crawler.get_articles(), thư viện sẽ ưu tiên sử dụng RSS feeds nếu chúng được cấu hình cho site_name đó. Nếu RSS fetch thất bại hoặc không có RSS, nó sẽ chuyển sang sử dụng Sitemap.
4.2. Xử lý lỗi và Ghi log
vnstock_news sử dụng module logging của Python để cung cấp thông tin chi tiết về quá trình hoạt động. Bạn có thể bật chế độ debug để xem các log cấp thấp hơn.
from vnstock_news.core.crawler import Crawler
from vnstock_news.utils.logger import setup_logger
# Thiết lập logger cho toàn bộ ứng dụng
logger = setup_logger("MyApp", debug=True)
# Khởi tạo Crawler với debug=True để xem log chi tiết từ Crawler
crawler = Crawler(site_name='cafef', debug=True)
try:
articles = crawler.get_articles(limit=1)
details = crawler.get_article_details(articles[0]['url'])
print(details['title'])
except Exception as e:
logger.error(f"Đã xảy ra lỗi: {e}")Các lỗi phổ biến và cách xử lý:
ValueError: Unsupported site: Tên trang bạn cung cấp không có trongSITES_CONFIGvà bạn không cung cấpcustom_config.ValueError: No valid RSS or Sitemap source: Trang không có cấu hình RSS/Sitemap hợp lệ hoặc URL Sitemap/RSS bạn cung cấp không thể truy cập được.ValueError: Article content not found: Bộ chọncontent_selectorkhông tìm thấy nội dung bài viết trên trang. Cần kiểm tra lại HTML của trang và cập nhật selector.requests.exceptions.RequestException(Timeout, ConnectionError, HTTPError): Lỗi mạng khi cố gắng tải trang. Kiểm tra kết nối internet, URL, hoặc tăngtimeouttrong các phương thứcfetchcủaSitemaphoặcNews.
4.3. Caching
Thư viện có tích hợp một hệ thống cache đơn giản để lưu trữ phản hồi HTTP, giúp tăng tốc độ thu thập dữ liệu và giảm tải cho máy chủ đích. Cache được khởi tạo tự động và hoạt động ở chế độ nền.
Bạn không cần cấu hình gì thêm để sử dụng cache. Tuy nhiên, nếu bạn gặp vấn đề với dữ liệu cũ, bạn có thể cần xóa cache thủ công (thường là các file trong thư mục tạm thời của hệ thống).
4.4. Tối ưu hóa hiệu suất
request_delaytrongBatchCrawler: Đặt một độ trễ hợp lý giữa các yêu cầu để tránh bị chặn IP hoặc gây quá tải cho máy chủ đích. Giá trị mặc định là 0.5 giây.limitvàlimit_per_feed: Sử dụng các tham số này để giới hạn số lượng bài viết được thu thập, đặc biệt khi bạn chỉ cần các tin tức mới nhất.- Sử dụng
BatchCrawler: Khi cần thu thập nhiều bài viết,BatchCrawlersẽ quản lý các yêu cầu một cách hiệu quả hơn so với việc gọiget_article_detailstừng cái một trong một vòng lặp đơn giản.
Thảo luận