Vnstock Logo

Tùy biến Nâng cao

Cập nhật lần cuối:

Thảo luận

Mục lục

Nâng cao - Dành cho người dùng có kinh nghiệm

Phần này dành cho những ai đã quen thuộc với các khái niệm cơ bản của vnstock_news và muốn tùy chỉnh sâu hơn, xử lý các tình huống phức tạp, hoặc tối ưu hóa hiệu suất thu thập dữ liệu.

Nâng cao với vnstock_news

Khi bạn đã làm quen với các khái niệm cơ bản, vnstock_news cung cấp nhiều tính năng nâng cao để giải quyết các tình huống phức tạp và tối ưu hóa hiệu suất:

  • Xử lý Sitemap/RSS động - Tự động giải quyết URL thay đổi theo thời gian
  • Logging và Error Handling - Ghi log chi tiết và xử lý lỗi hiệu quả
  • Caching - Tối ưu hóa tốc độ với hệ thống cache tích hợp
  • Performance Optimization - Tối ưu hóa hiệu suất thu thập dữ liệu

Hãy khám phá từng tính năng nâng cao!


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:

Python
"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.


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.

Thiết lập Logging

Python
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ý

Loại lỗiNguyên nhânCách xử lý
ValueError: Unsupported siteTên trang không có trong SITES_CONFIG và không cung cấp custom_configKiểm tra lại tên trang hoặc cung cấp custom_config
ValueError: No valid RSS or Sitemap sourceTrang không có cấu hình RSS/Sitemap hợp lệ hoặc URL không thể truy cậpKiểm tra URL và cấu hình RSS/Sitemap của trang
ValueError: Article content not foundcontent_selector không tìm thấy nội dung bài viếtKiểm tra lại HTML của trang và cập nhật selector
requests.exceptions.RequestExceptionLỗi mạng (Timeout, ConnectionError, HTTPError)Kiểm tra kết nối internet, URL, hoặc tăng timeout

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.

Cache hoạt động như thế nào?

  • Tự động lưu trữ: Mọi phản hồi HTTP đều được cache tự động
  • Tăng tốc độ: Các yêu cầu trùng lặp sẽ được phục vụ từ cache
  • Giảm tải: Giảm số lượng request đến máy chủ đích
  • Minh bạch: Hoạt động ngầm mà không cần cấu hình gì thêm

Mẹo: 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).


Tối ưu hóa hiệu suất

Khi thu thập dữ liệu ở quy mô lớn, việc tối ưu hóa hiệu suất là rất quan trọng. Dưới đây là các kỹ thuật và mẹo để tối ưu hóa:

request_delay trong BatchCrawler

Đặ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.

Python
# Đặt độ trễ 0.5 giây giữa mỗi yêu cầu
batch_crawler = BatchCrawler(site_name='cafef', request_delay=0.5)

# Đặt độ trễ 1 giây cho các trang nhạy cảm
batch_crawler_sensitive = BatchCrawler(site_name='vnexpress', request_delay=1.0)

Sử dụng limitlimit_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.

Python
# Chỉ lấy 5 bài viết mới nhất
articles = crawler.get_articles(limit=5)

# Giới hạn 10 bài viết mỗi feed
articles = crawler.get_articles(limit_per_feed=10)

Sử dụng BatchCrawler hiệu quả

Khi cần thu thập nhiều bài viết, BatchCrawler sẽ quản lý các yêu cầu một cách hiệu quả hơn so với việc gọi get_article_details từng cái một trong một vòng lặp đơn giản.

Python
# Không hiệu quả - gọi từng bài viết
for url in urls:
    details = crawler.get_article_details(url)
    # xử lý details...

# Hiệu quả - sử dụng BatchCrawler  
batch_crawler = BatchCrawler(site_name='cafef', request_delay=0.5)
detailed_articles_df = batch_crawler.fetch_details_for_urls(urls=urls)
# xử lý DataFrame...

Mẹo tối ưu hóa khác

  • Sử dụng RSS khi có thể: RSS thường nhẹ hơn và tải nhanh hơn Sitemap
  • Chọn thời điểm thu thập hợp lý: Tránh giờ cao điểm của trang web
  • Xử dụng concurrent requests: BatchCrawler đã tối ưu việc này
  • Giám sát log: Bật debug mode để theo dõi hiệu suất

Tiếp theo

Bây giờ bạn đã nắm vững các kỹ thuật nâng cao của vnstock_news! Hãy tiếp tục với:


Tài nguyên tham khảo

Thảo luận

Đang tải bình luận...