सुंदर सूप - पेड़ को संशोधित करना

ब्यूटीफुलसुप के महत्वपूर्ण पहलुओं में से एक खोज है पार्स ट्री और यह आपको अपनी आवश्यकता के अनुसार वेब दस्तावेज़ में बदलाव करने की अनुमति देता है। हम इसकी विशेषताओं का उपयोग करके टैग के गुणों में परिवर्तन कर सकते हैं, जैसे कि .name, .string या .append () विधि। यह आपको .new_string () और .new_tag () विधियों की सहायता से मौजूदा टैग में नए टैग और स्ट्रिंग्स जोड़ने की अनुमति देता है। आपके HTML या XML दस्तावेज़ में विभिन्न संशोधन करने के लिए अन्य विधियाँ भी हैं, जैसे .insert (), .insert_before () या .insert_after ()।

टैग नाम और विशेषताएँ बदलना

एक बार जब आप सूप बना लेते हैं, तो टैग का नाम बदलना, उसकी विशेषताओं में संशोधन करना, नई विशेषताओं को जोड़ना और विशेषताओं को हटाना जैसे संशोधन करना आसान होता है।

>>> soup = BeautifulSoup('<b class="bolder">Very Bold</b>')
>>> tag = soup.b

संशोधन और नई विशेषताएँ जोड़ना इस प्रकार हैं -

>>> tag.name = 'Blockquote'
>>> tag['class'] = 'Bolder'
>>> tag['id'] = 1.1
>>> tag
<Blockquote class="Bolder" id="1.1">Very Bold</Blockquote>

हटाने की विशेषताएँ इस प्रकार हैं -

>>> del tag['class']
>>> tag
<Blockquote id="1.1">Very Bold</Blockquote>
>>> del tag['id']
>>> tag
<Blockquote>Very Bold</Blockquote>

संशोधन .string

आप टैग की .string विशेषता को आसानी से संशोधित कर सकते हैं -

>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">Must for every <i>Learner>/i<</a>'
>>> Bsoup = BeautifulSoup(markup)
>>> tag = Bsoup.a
>>> tag.string = "My Favourite spot."
>>> tag
<a href="https://www.tutorialspoint.com/index.htm">My Favourite spot.</a>

ऊपर से, हम देख सकते हैं कि टैग में कोई अन्य टैग है या नहीं, वे और उनकी सभी सामग्री नए डेटा द्वारा बदल दी जाएंगी।

संलग्न ()

किसी मौजूदा टैग में नया डेटा / सामग्री जोड़ना tag.append () विधि का उपयोग करके है। यह पायथन सूची में एपेंड () पद्धति के समान है।

>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">Must for every <i>Learner</i></a>'
>>> Bsoup = BeautifulSoup(markup)
>>> Bsoup.a.append(" Really Liked it")
>>> Bsoup
<html><body><a href="https://www.tutorialspoint.com/index.htm">Must for every <i>Learner</i> Really Liked it</a></body></html>
>>> Bsoup.a.contents
['Must for every ', <i>Learner</i>, ' Really Liked it']

NavigableString () और .new_tag ()

यदि आप किसी दस्तावेज़ में स्ट्रिंग जोड़ना चाहते हैं, तो यह आसानी से अपेंड () या नेविगेबल स्ट्रींग () कंस्ट्रक्टर द्वारा उपयोग किया जा सकता है -

>>> soup = BeautifulSoup("<b></b>")
>>> tag = soup.b
>>> tag.append("Start")
>>>
>>> new_string = NavigableString(" Your")
>>> tag.append(new_string)
>>> tag
<b>Start Your</b>
>>> tag.contents
['Start', ' Your']

Note: यदि आपको निम्न के रूप में NavigableString () फ़ंक्शन तक पहुंचते समय कोई भी नाम त्रुटि मिलती है

NameError: 'NavigableString' नाम परिभाषित नहीं है

बस bs4 पैकेज से NavigableString निर्देशिका आयात करें -

>>> from bs4 import NavigableString

हम उपरोक्त त्रुटि को हल कर सकते हैं।

आप अपने मौजूदा टैग में टिप्पणियां जोड़ सकते हैं या फिर नवीगबलस्ट्रिंग के कुछ अन्य उपवर्ग जोड़ सकते हैं, बस कंस्ट्रक्टर को कॉल करें।

>>> from bs4 import Comment
>>> adding_comment = Comment("Always Learn something Good!")
>>> tag.append(adding_comment)
>>> tag
<b>Start Your<!--Always Learn something Good!--></b>
>>> tag.contents
['Start', ' Your', 'Always Learn something Good!']

एक नया टैग (किसी मौजूदा टैग को लागू नहीं करना) जोड़ना, सुंदरसो इनबिल्ट विधि, ब्यूटीसाउप.न्यू_टैग () का उपयोग करके किया जा सकता है।

>>> soup = BeautifulSoup("<b></b>")
>>> Otag = soup.b
>>>
>>> Newtag = soup.new_tag("a", href="https://www.tutorialspoint.com")
>>> Otag.append(Newtag)
>>> Otag
<b><a href="https://www.tutorialspoint.com"></a></b>

केवल पहला तर्क, टैग नाम की आवश्यकता है।

डालने ()

अजगर सूची पर .insert () पद्धति के समान, tag.insert () tag.append () के विपरीत, नए तत्व सम्मिलित करेगा, लेकिन नया तत्व आवश्यक रूप से अपने माता-पिता की सामग्री के अंत में नहीं जाता है। नए तत्व को किसी भी स्थिति में जोड़ा जा सकता है।

>>> markup = '<a href="https://www.djangoproject.com/community/">Django Official website <i>Huge Community base</i></a>'
>>> soup = BeautifulSoup(markup)
>>> tag = soup.a
>>>
>>> tag.insert(1, "Love this framework ")
>>> tag
<a href="https://www.djangoproject.com/community/">Django Official website Love this framework <i>Huge Community base</i></a>
>>> tag.contents
['Django Official website ', 'Love this framework ', <i>Huge Community base</i
>]
>>>

सम्मिलित_बाहर () और डालें_का बाद ()

तोते के पेड़ में कुछ डालने से पहले कुछ टैग या स्ट्रिंग डालने के लिए, हम insert_before () का उपयोग करते हैं -

>>> soup = BeautifulSoup("Brave")
>>> tag = soup.new_tag("i")
>>> tag.string = "Be"
>>>
>>> soup.b.string.insert_before(tag)
>>> soup.b
<b><i>Be</i>Brave</b>

इसी तरह पार्स ट्री में कुछ के बाद कुछ टैग या स्ट्रिंग डालने के लिए, Insert_after () का उपयोग करें।

>>> soup.b.i.insert_after(soup.new_string(" Always "))
>>> soup.b
<b><i>Be</i> Always Brave</b>
>>> soup.b.contents
[<i>Be</i>, ' Always ', 'Brave']

स्पष्ट()

किसी टैग की सामग्री को निकालने के लिए, tag.clear () का उपयोग करें -

>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical&lr;/i> Contents</a>'
>>> soup = BeautifulSoup(markup)
>>> tag = soup.a
>>> tag
<a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical</i> Contents</a>
>>>
>>> tag.clear()
>>> tag
<a href="https://www.tutorialspoint.com/index.htm"></a>

निकालने ()

पेड़ से कोई टैग या तार निकालने के लिए, PageElement.extract () का उपयोग करें।

>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">For <i&gr;technical & Non-technical</i> Contents</a>'
>>> soup = BeautifulSoup(markup)
>>> a_tag = soup.a
>>>
>>> i_tag = soup.i.extract()
>>>
>>> a_tag
<a href="https://www.tutorialspoint.com/index.htm">For Contents</a>
>>>
>>> i_tag
<i>technical & Non-technical</i>
>>>
>>> print(i_tag.parent)
None

विघटित ()

Tag.decompose () ट्री से एक टैग हटाता है और उसकी सभी सामग्री हटाता है।

>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical</i> Contents</a>'
>>> soup = BeautifulSoup(markup)
>>> a_tag = soup.a
>>> a_tag
<a href="https://www.tutorialspoint.com/index.htm">For <i>technical & Non-technical</i> Contents</a>
>>>
>>> soup.i.decompose()
>>> a_tag
<a href="https://www.tutorialspoint.com/index.htm">For Contents</a>
>>>

से बदलो()

जैसा कि नाम से पता चलता है, pageElement.replace_with () फ़ंक्शन पुराने टैग या स्ट्रिंग को नए टैग या स्ट्रिंग को ट्री में बदल देगा -

>>> markup = '<a href="https://www.tutorialspoint.com/index.htm">Complete Python <i>Material</i></a>'
>>> soup = BeautifulSoup(markup)
>>> a_tag = soup.a
>>>
>>> new_tag = soup.new_tag("Official_site")
>>> new_tag.string = "https://www.python.org/"
>>> a_tag.i.replace_with(new_tag)
<i>Material</i>
>>>
>>> a_tag
<a href="https://www.tutorialspoint.com/index.htm">Complete Python <Official_site>https://www.python.org/</Official_site></a>

उपरोक्त आउटपुट में, आपने देखा है कि रिप्लेस_विथ () उस टैग या स्ट्रिंग को लौटाता है जिसे हमारे मामले में "सामग्री" की तरह प्रतिस्थापित किया गया था), इसलिए आप इसकी जांच कर सकते हैं या इसे वापस पेड़ के दूसरे हिस्से में जोड़ सकते हैं।

रैप ()

PageElement.wrap () आपके द्वारा निर्दिष्ट टैग में एक तत्व संलग्न करता है और एक नया आवरण देता है -

>>> soup = BeautifulSoup("<p>tutorialspoint.com</p>")
>>> soup.p.string.wrap(soup.new_tag("b"))
<b>tutorialspoint.com</b>
>>>
>>> soup.p.wrap(soup.new_tag("Div"))
<Div><p><b>tutorialspoint.com</b></p></Div>

खोलना ()

Tag.unwrap () केवल रैप के विपरीत है () और उस टैग के अंदर जो भी है उसके साथ एक टैग को बदलता है।

>>> soup = BeautifulSoup('<a href="https://www.tutorialspoint.com/">I liked <i>tutorialspoint</i></a>')
>>> a_tag = soup.a
>>>
>>> a_tag.i.unwrap()
<i></i>
>>> a_tag
<a href="https://www.tutorialspoint.com/">I liked tutorialspoint</a>

ऊपर से, आपने देखा है कि जैसे कि रिप्लेस_विथ (), अनप्रैप () उस टैग को लौटा देता है जिसे बदल दिया गया था।

नीचे इसे बेहतर समझने के लिए अनप्रैप () का एक और उदाहरण है -

>>> soup = BeautifulSoup("<p>I <strong>AM</strong> a <i>text</i>.</p>")
>>> soup.i.unwrap()
<i></i>
>>> soup
<html><body><p>I <strong>AM</strong> a text.</p></body></html>

अनकैप () मार्कअप स्ट्रिपिंग के लिए अच्छा है।