2010-07-12 34 views
6

Đối với những người biết wget, nó có tùy chọn --spider, cho phép kiểm tra xem liên kết có bị hỏng hay không mà không tải xuống trang web. Tôi muốn làm điều tương tự trong Python. Vấn đề của tôi là tôi có một danh sách các liên kết 100'000 tôi muốn kiểm tra, tối đa một lần mỗi ngày và ít nhất một lần một tuần. Trong mọi trường hợp, điều này sẽ tạo ra rất nhiều lưu lượng truy cập không cần thiết.Kiểm tra xem liên kết đã chết hay không bằng cách sử dụng Python mà không tải xuống trang web

Theo như tôi hiểu từ urllib2.urlopen() documentation, nó không tải xuống trang nhưng chỉ có thông tin meta. Điều này có đúng không? Hay có cách nào khác để làm điều này một cách tốt đẹp?

nhất,
Troels

Trả lời

9

bạn nên sử dụng HEAD Request cho điều này, nó sẽ hỏi máy chủ web cho các tiêu đề mà không cần cơ thể . Xem How do you send a HEAD HTTP request in Python 2?

+0

Phải, HEAD sẽ đưa bạn tiêu đề (bao gồm trạng thái HTTP) mà không tải xuống nội dung thư. Một số trang web (mis) được định cấu hình để gửi 'không tìm thấy'/404 trang có trạng thái 200, do đó, sẽ rất khó để phát hiện những tình huống đó. – JAL

+0

Theo như tôi có thể nói đây là những gì wget --spider nào. –

+0

Cảm ơn rất nhiều vì giải pháp cũng như suy nghĩ về các trang web bị định cấu hình sai (điều đáng lưu ý!) - đó chỉ là những gì tôi cần :) – Troels

-1

Không chắc làm thế nào để làm điều này trong python nhưng nói chung, bạn có thể kiểm tra 'đáp ứng Tiêu đề' và kiểm tra 'Status-Code' cho mã 200. vào thời điểm mà bạn có thể ngừng đọc trang và tiếp tục với liên kết tiếp theo của bạn theo cách mà bạn không cần phải tải về toàn bộ trang chỉ là 'đáp ứng tiêu đề' Danh sách Status Codes

+0

Tại sao điều này đã bị bỏ phiếu, hãy giải thích lý do của bạn? Tôi biết rằng điều này không sử dụng yêu cầu Head nhưng nó hoàn thành điều tương tự. – Greg

+0

301 là một chuyển hướng và cũng là một phản hồi tốt. Trên thực tế, bất kỳ 2 ** nào là OK, 3 ** cần xử lý thêm (chuyển hướng), v.v. Chỉ kiểm tra 200 không đủ. – kgadek

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