2013-01-10 34 views
11

Tôi đang sử dụng thư viện feedparser trong Python để nhận các chi tiết khác nhau từ nguồn cấp dữ liệu RSS. Giả sử tôi đã rút ra 25 tiêu đề tiêu đề từ nguồn cấp dữ liệu RSS của kênh tin tức. Sau một giờ, tôi chạy lệnh feedparser lần nữa để lấy danh sách mới nhất của các tiêu đề của 25 dòng tiêu đề mới. Danh sách có thể hoặc không được cập nhật lần thứ hai tôi chạy lệnh feedparser. Một số tiêu đề có thể giống nhau và một số tiêu đề có thể mới. Tôi cần phải kiểm tra xem có bản cập nhật nào trong bất kỳ tiêu đề tin tức nào với tiêu đề đã được rút ra khỏi giờ trước đó hay không. Chỉ các tiêu đề mới phải được đẩy vào cơ sở dữ liệu. Điều này là để tránh trùng lặp nhận được bán phá giá vào cơ sở dữ liệu.Làm thế nào để kiểm tra xem một nguồn cấp dữ liệu RSS đã được cập nhật bằng Python chưa?

Mã này trông giống như dưới đây:

import feedparser 
d = feedparser.parse('www.news.example.xml') 
for item in d.entries: 
    hndlr.write(item.title) #data being dumped into a database 

tôi cần để có thể chạy các mã trên mỗi giờ và kiểm tra xem có bất kỳ bản cập nhật trong các tiêu đề (title). Và nếu có bất kỳ thay đổi nào với dữ liệu được trích xuất giờ trước đó, thì chỉ dữ liệu mới mới được đưa vào cơ sở dữ liệu.

Ai đó có thể giúp tôi không?

Trả lời

13

Mỗi mục nguồn cấp dữ liệu có số nhận dạng, trong item.id. Theo dõi chúng, cùng với mục nhập .updated (hoặc .updated_parsed) để kiểm tra các mục mới.

Vì vậy, hãy xem bạn đã xem mặt hàng chưa (thông qua item.id) hoặc nếu nó đã được cập nhật kể từ lần cuối bạn kiểm tra (qua item.updated hoặc item.updated_parsed).

Đảm bảo bạn tận dụng lợi thế của trình thu thập dữ liệu E-Tag support để kiểm tra nội dung nguồn cấp dữ liệu đã thay đổi. Điều này sẽ chỉ giúp bạn không tải xuống nguồn cấp dữ liệu mà không có các mục mới; bạn vẫn cần phát hiện các mục đã được thêm hoặc cập nhật khi bạn nhận được một bản sao mới của nguồn cấp dữ liệu.

1

Đối với "tốt" feeds bạn có thể sử dụng ETag và cuối cùng modfied-kể từ khi cơ chế, nó được mô tả ở đây http://www.kbcafe.com/rss/rssfeedstate.html

Nhưng một số máy chủ không hỗ trợ nó, vì vậy bạn cần phải chỉ đơn giản là kiểm tra bài ngày và id và xem , bạn có bài viết như vậy trong DB của bạn hay không.

Các vấn đề liên quan