2010-07-12 7 views
6

जो wget को जानते हैं, उनके पास एक विकल्प --spider है, जो किसी को यह जांचने की अनुमति देता है कि कोई लिंक तोड़ दिया गया है या नहीं, वास्तव में वेबपृष्ठ डाउनलोड किए बिना। मैं पाइथन में एक ही काम करना चाहता हूं। मेरी समस्या यह है कि मेरे पास 100'000 लिंक की एक सूची है जिसे मैं देखना चाहता हूं, दिन में सबसे अधिक बार, और सप्ताह में कम से कम एक बार। किसी भी मामले में यह बहुत अनावश्यक यातायात उत्पन्न करेगा।वेबपृष्ठ डाउनलोड किए बिना पाइथन का उपयोग कर एक लिंक मर गया है या नहीं

जहां तक ​​मैं urllib2.urlopen() documentation से समझता हूं, यह पृष्ठ डाउनलोड नहीं करता है बल्कि केवल मेटा-सूचना है। क्या ये सही है? या क्या यह एक अच्छा तरीके से करने का कोई और तरीका है?

बेस्ट,
ट्रॉल्स

उत्तर

9

की सूची आप इस के लिए HEAD Request का उपयोग करना चाहिए डाउनलोड करने के लिए की जरूरत नहीं है अपने अगले लिंक के साथ जारी रखने के लिए, यह शरीर के बिना हेडर के लिए वेब सर्वर पूछता है । देखें How do you send a HEAD HTTP request in Python 2?

+0

दाएं, HEAD आपको संदेश के शरीर को डाउनलोड किए बिना शीर्षलेख (HTTP स्थिति सहित) प्राप्त करेगा। कुछ साइटें (गलत) 200 की स्थिति वाले 'नहीं मिला'/404 पृष्ठों को भेजने के लिए कॉन्फ़िगर की गई हैं, हालांकि, उन स्थितियों का पता लगाना मुश्किल होगा। – JAL

+0

जहां तक ​​मैं यह कह सकता हूं कि wget --spider क्या करता है। –

+0

समाधान के साथ-साथ गलत कॉन्फ़िगर किए गए साइटों पर विचारों के लिए बहुत कुछ धन्यवाद (जो ध्यान में रखने योग्य है!) - यही वही है जो मुझे चाहिए :) – Troels

-1

सुनिश्चित नहीं हैं कि अजगर में यह करने के लिए लेकिन आम तौर पर आप 'रिस्पांस हैडर' की जाँच करें और कोड 200 के लिए 'स्थिति-कोड' जाँच उस बिंदु पर आप पेज पढ़ने रोक सकता है हो सकता है और कहा कि जिस तरह से आप पूरे पृष्ठ सिर्फ 'रिस्पांस हैडर' Status Codes

+0

यह क्यों मतदान किया गया है, कृपया अपनी तर्क बताएं? मुझे पता है कि यह मुख्य अनुरोध का उपयोग नहीं करता है, लेकिन यह वही काम पूरा करता है। – Greg

+0

301 एक रीडायरेक्ट है और अच्छी प्रतिक्रिया भी है। दरअसल, कोई भी 2 ** ठीक है, 3 ** आगे प्रसंस्करण (रीडायरेक्ट) की आवश्यकता है, आदि केवल 200 के लिए जांच अपर्याप्त है। – kgadek

संबंधित मुद्दे