समस्या
जब पाइथन का उपयोग करके किसी वेबपृष्ठ को स्क्रीन स्क्रैप करना पृष्ठ के चरित्र एन्कोडिंग को जानना होता है। यदि आपको अपने आउटपुट से गलत वर्ण एन्कोडिंग मिलती है तो उसे गड़बड़ कर दिया जाएगा।पाइथन में सही वर्णमाला के साथ किसी भी (!) वेबपृष्ठ को कैसे डाउनलोड करें?
लोग आमतौर पर एन्कोडिंग का पता लगाने के लिए कुछ प्राथमिक तकनीक का उपयोग करते हैं। वे या तो मेटा टैग में परिभाषित हेडर या वर्णमाला से वर्णमाला का उपयोग करते हैं या वे encoding detector (जो मेटा टैग या शीर्षलेखों की परवाह नहीं करते हैं) का उपयोग करते हैं। केवल इन तकनीकों का उपयोग करके, कभी-कभी आपको एक ही परिणाम नहीं मिलेगा जैसा आप ब्राउज़र में करेंगे।
ब्राउज़र्स यह इस तरह से कार्य करें:
- मेटा टैग हमेशा प्राथमिकता दी जाएगी (या एक्सएमएल परिभाषा)
- एन्कोडिंग हेडर में निर्धारित लेता है प्रयोग किया जाता है, जब कोई चारसेट एक मेटा टैग में परिभाषित किया गया है
- हैं एन्कोडिंग को परिभाषित करने के लिए समय की तुलना में एन्कोडिंग बिल्कुल परिभाषित नहीं है।
(ठीक है ... कम से कम इस तरह मेरा मानना है कि अधिकांश ब्राउज़र यह करना है। प्रलेखन वास्तव में दुर्लभ है।)
क्या मैं के लिए देख रहा हूँ एक पुस्तकालय है कि वर्ण सेट का फैसला कर सकते है एक पृष्ठ के रूप में एक ब्राउज़र होगा। मुझे यकीन है कि मैं पहले व्यक्ति नहीं हूं जिसकी इस समस्या के लिए उचित समाधान की आवश्यकता है।
समाधान (मैं इसे अभी तक प्रयास नहीं किया है ...)
Beautiful Soup's documentation के अनुसार।
ब्यूटीफुल सूप निम्नलिखित एन्कोडिंग की कोशिश करता है, प्राथमिकता के क्रम में, यूनिकोड में अपने दस्तावेज़ चालू करने के लिए:
- एक एन्कोडिंग आप सूप निर्माता को fromEncoding तर्क के रूप में में गुजरती हैं।
- दस्तावेज़ में स्वयं एक एन्कोडिंग खोजा गया: उदाहरण के लिए, एक्सएमएल घोषणा में या (एचटीएमएल दस्तावेजों के लिए) एक http-equiv मेटा टैग में। यदि सुंदर सूप दस्तावेज़ के भीतर इस तरह के एन्कोडिंग को पाता है, तो यह दस्तावेज़ को शुरुआत से फिर से विश्लेषण करता है और नई एन्कोडिंग को आज़माता है। एकमात्र अपवाद यह है कि यदि आपने स्पष्ट रूप से एन्कोडिंग निर्दिष्ट किया है, और वह एन्कोडिंग वास्तव में काम करती है: तो यह दस्तावेज़ में पाई गई किसी भी एन्कोडिंग को अनदेखा कर देगी।
- फ़ाइल के पहले कुछ बाइट्स को देखकर एक एन्कोडिंग स्नीफ किया गया। यदि इस चरण में एक एन्कोडिंग पता चला है, तो यह यूटीएफ- * एन्कोडिंग, ईबीसीडीआईसी, या ASCII में से एक होगा।
- एन्कोडिंग chardet लाइब्रेरी द्वारा स्नीफ किया गया है, यदि आपने इसे इंस्टॉल किया है।
- UTF-8
- विंडोज-1252
आप डाउनलोड नहीं कर सकते "किसी भी" पृष्ठ। जब ब्राउज़र सही वर्णमाला निर्दिष्ट नहीं होता है, तो ब्राउज़र हर समय गलत लगता है। मैं दैनिक आधार पर गलत अनुमानों को ठीक करने के लिए एफएफ में दृश्य-> एन्कोडिंग मेनू का उपयोग करता हूं। आप जितना भी कर सकते हैं उतना करना चाहते हैं, लेकिन हर पृष्ठ को सही तरीके से अनुमान लगाने पर छोड़ दें। –
अनुमान लगाने वाले चरित्र सेट बुरा है और हमें इस गड़बड़ी में पहली जगह मिला है। यदि ब्राउज़र ने कभी अनुमान लगाने का प्रयास नहीं किया था, तो डेवलपर्स को HTTP शीर्षलेखों के बारे में जानने के लिए मजबूर होना होगा और हमेशा एन्कोडिंग को सही तरीके से निर्दिष्ट करना होगा। अनुमान लगाना मतलब है कि आप इसे गलत मानने जा रहे हैं –
gnibbler, अनुमान एक अंतिम उपाय –