2011-09-29 15 views
9

क्या आपको पता है कि सुंदर सूप ट्यूटोरियल http://www.crummy.com/software/BeautifulSoup/documentation.html#QuickStart में पहला उदाहरण AttributeError: 'NavigableString' object has no attribute 'name' क्यों देता है? this answer के अनुसार HTML में स्पेस वर्ण समस्या का कारण बनते हैं। मैंने कुछ पृष्ठों के स्रोतों के साथ प्रयास किया और 1 ने दूसरों को एक ही त्रुटि दी (मैंने रिक्त स्थान हटा दिए)। क्या आप समझा सकते हैं कि "नाम" क्या संदर्भित करता है और यह त्रुटि क्यों होती है? धन्यवाद।सुंदर सूप: विशेषताइंटर: 'नेविगेलस्ट्रिंग' ऑब्जेक्ट में कोई विशेषता नहीं है 'नाम'

उत्तर

13

name टैग के नाम का उल्लेख होगा अगर वस्तु एक Tag वस्तु है (यानी: <html> नाम = "html")

यदि आप नोड्स के बीच में अपने मार्कअप में रिक्त स्थान BeautifulSoup NavigableString रूप में करना होगा के। तो यदि आप नोड्स को पकड़ने के लिए contents की अनुक्रमणिका का उपयोग करते हैं, तो आप अगले Tag के बजाय NavigableString प्राप्त कर सकते हैं।

इससे बचने के लिए, नोड के लिए क्वेरी आप देख रहे हैं: Searching the Parse Tree

या यदि आप अगले टैग के नाम पर आप चाहते हैं पता है, तुम संपत्ति के रूप में उस नाम का उपयोग कर सकते हैं और यह पहली बार वापस आ जाएगी इस नाम की Tag या None अगर इस नाम का कोई बच्चों मौजूद हैं: Using Tag Names as Members

आप उपयोग करना चाहते हैं, तो contents आप वस्तुओं आप के साथ काम कर रहे हैं की जाँच करने के लिए है। त्रुटि मिल रहा है सिर्फ मतलब है कि आप क्योंकि कोड मान लिया गया है कि यह एक Tag

5

आप मामलों को खत्म करने की कोशिश पकड़ उपयोग कर सकते हैं जब नौगम्य स्ट्रिंग इस तरह पाश में पार्स किया जा रहा है, है नाम संपत्ति का उपयोग करने की कोशिश कर रहे हैं:

for j in soup.find_all(...) 
     try: 
      print j.find(...) 
     except NavigableString: 
      pass 
3

बस NavigableString वस्तुओं की अनदेखी करते हुए पेड़ के माध्यम से पुनरावृत्ति:()

response = requests.get(url) 
soup = BeautifulSoup(response.text, 'html.parser') 

for body_child in soup.body.children: 
    if isinstance(body_child, NavigableString): 
     continue 
    if isinstance(body_child, Tag): 
     print(body_child.name) 
+1

.find_all केवल चाइल्ड टैग वापस जाने के लिए प्रकट होता है और व्हाइटस्पेस पर ध्यान नहीं देता ... –

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