2011-12-10 18 views
7

के साथ पायथन XPath पार्सिंग टैग मैं XPath के लिए नया हूं। मैं XPath का उपयोग कर एक पेज पार्स करने की कोशिश कर रहा हूं। मुझे टैग से जानकारी प्राप्त करने की ज़रूरत है, लेकिन सब कुछ ऊपर शीर्षक स्क्रू में एस्ट्रोफ़े से बच निकला।एस्ट्रोफ़े

पार्सिंग के लिए मैं Grab का उपयोग करता हूं। स्रोत से

टैग:

<img src='somelink' border='0' alt='commission:Alfred\'s misadventures' title='commission:Alfred\'s misadventures'> 

वास्तविक XPath:

g.xpath('.//tr/td/a[3]/img').get('title') 

रिटर्न

commission:Alfred\\ 

तो इसे ठीक करने कोई तरीका है?

धन्यवाद

+4

ईमानदारी से, आपको खुशी होगी कि आपका '.xpath' कुछ भी लौटाता है। यह एचटीएमएल एलएक्सएमएल के 'एचटीएमएल' मॉड्यूल के लिए पर्याप्त अमान्य है जिस पर इसे दबाया जा सकता है। –

+2

मैंने अभी कुछ एलसीएमएल और सुंदर सूप के साथ प्रयोग किया है, और उनमें से कोई भी इसे सही तरीके से पार्स नहीं किया गया है। जाहिर है, विशेषता मानों के लिए बाहरी उद्धरण डबल कोट्स होना चाहिए। एचटीएमएल का स्रोत क्या है? – ekhumoro

उत्तर

5

में, कचरा बाहर कचरा। आपका इनपुट अच्छी तरह से गठित नहीं है, क्योंकि यह अनुचित रूप से एकल उद्धरण चरित्र से बच निकलता है। कई प्रोग्रामिंग भाषाएं (पायथन सहित) स्ट्रिंग अक्षर में उद्धरण से बचने के लिए बैकस्लैश वर्ण का उपयोग करती हैं। एक्सएमएल नहीं है। आपको या तो 1) गुणों के मूल्य को डबल-कोट्स के साथ घेरना चाहिए; या 2) &apos; का उपयोग एक एकल उद्धरण शामिल करने के लिए करें।

the XML spec से

:

विशेषता मान दोनों सिंगल और डबल उद्धरण, apostrophe या एकल उद्धरण कैरेक्टर (') के रूप में " &apos;" प्रस्तुत किया जा सकता है, और दोहरे-उद्धरण शामिल करने के लिए अनुमति देने के लिए चरित्र (") &quot; के रूप में" "।

+0

जानकारी के लिए धन्यवाद, लेकिन यह मेरा इनपुट नहीं है। मैं उस टैग के साथ एक पेज को पार्स करने की कोशिश कर रहा हूं, इसलिए इसे ठीक करने का एकमात्र तरीका - इसे पूरे स्रोत में बदलें। खुशी से, मैं पहले ही हल कर चुका हूं (बिल्कुल नहीं, लेकिन वैसे भी ...) रेगेक्स –

+1

एक्सएमएल के साथ यह समस्या पोस्टेल के कानून को तोड़ती है, लेकिन व्यावहारिक रूप से इसे उचित XML पार्सर पर भेजने से पहले इनपुट को मालिश करने के लिए कभी-कभी आवश्यक होता है। कुछ शुद्धवादी इसके लिए आपको बेरेट करेंगे, लेकिन मुझे इसके बारे में बहुत बुरा नहीं लगेगा। –

+0

एक्सएमएल पहले से ही एस्ट्रोफ़े को एक विशेषता मान में प्राप्त करने के दो तरीकों की अनुमति देता है: (1) apostrophes (2) उपयोग के बजाय उद्धरण में मान संलग्न करें। '''। आइए इसे पोस्टेल-अनुरूप बनाएं, और दो अतिरिक्त तरीकों को जोड़ें। (1) बैकस्लैश-एस्केपिंग (2) एस्ट्रोफ़े-दोगुनी, एसक्यूएल में। आपके कार्य: व्याकरण को अद्यतन करें, एक पार्सर को बढ़ाएं। वैकल्पिक: खुश रहें कि एक्सएमएल ने HTML शंबल से बचा है जहां उपभोक्ता खराब HTML स्वीकार करने के अपने रास्ते से बाहर निकलते हैं। –

1

उपलब्ध कराने पर" XML "एक wellformed दस्तावेज़ कारण नेस्टेड अक्षर लोप करने के लिए, कोई XPath अभिव्यक्ति यह पर मूल्यांकन किया जा सकता है ।

<img src='somelink' 
border='0' 
alt='commission:Alfred&apos;s misadventures' 
title='commission:Alfred&apos;s misadventures'/> 
:

<img src="somelink" 
border="0" 
alt="commission:Alfred's misadventures" 
title="commission:Alfred's misadventures"/> 

मामले में एक अजीब requiremend उद्धरण, तो एक सही रूपांतरण है उपयोग करने के लिए नहीं है:

प्रदान की गैर-अच्छी तरह से गठित पाठ को सुधारा जा सकता है

यदि आपको गलत इनपुट प्रदान किया गया है, तो सी # एक भाषा में इसे:

का उपयोग करके इसे अपने सही समकक्ष में बदलने की कोशिश कर सकते हैं
string correctXml = input.replace("\\'s", "&apos;s") 

शायद पाइथन में ऐसा करने का एक ही तरीका है।

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