क्या मैं सुंदर टैग के साथ स्क्रिप्ट टैग हटा सकता हूं?


90

क्या स्क्रिप्ट टैग और उनकी सभी सामग्री HTML से ब्यूटीफुलसोप से हटाई जा सकती है, या मुझे रेग्युलर एक्सप्रेशंस या कुछ और का उपयोग करना होगा?

जवाबों:


160
>>> from bs4 import BeautifulSoup
>>> soup = BeautifulSoup('<script>a</script>baba<script>b</script>', 'lxml')
>>> for s in soup.select('script'):
>>>    s.extract()
>>> soup
baba

हटाए जाने वाले अतिरिक्त टैग पर श्रृंखला का सबसे अच्छा तरीका क्या है? अभी यह काम करता है अगर मैं एक के बाद एक आदेश को दोहराता हूं, सूप ('स्क्रिप्ट') में एस के लिए [s.extract ()] तो सूप में (s 'iframe')] और इतने पर के लिए [s.extract () , लेकिन नहीं तो अगर मैं उन्हें सूप ('iframe', 'script') में s के लिए [s.extract () पसंद करता हूं।]]
Ila

8
@ यदि आपको [s.extract() for s in soup(['iframe', 'script'])]ध्यान देना होगा कि कई टैग का उपयोग करने के लिए, पैरामीटर की एक सूची होनी चाहिए
Fábio Diniz

@ FábioDiniz मैं कुछ इस तरह कैसे निकालूंगा '<script class="blah">a</script>baba<script id="blahhhh">b</script>':? क्या यह वही है?
user2883071

2
इस ऑपरेशन के बाद सूप वस्तु बेकार हो जाती है, कोई टैग नहीं मिलता है।
मार्क

1
यह पुराना है, <html><head></head><body><p>baba</p></body></html>
सुंदरसोच

37

उन लोगों के लिए अद्यतित उत्तर जिन्हें भविष्य में संदर्भ की आवश्यकता हो सकती है: सही उत्तर है। decompose() आप विभिन्न तरीकों का उपयोग कर सकते हैं लेकिनdecompose इन-प्लेस काम करता है।

उदाहरण का उपयोग:

soup = BeautifulSoup('<p>This is a slimy text and <i> I am slimer</i></p>')
soup.i.decompose()
print str(soup)
#prints '<p>This is a slimy text and</p>'

To स्क्रिप्ट ’, 'इम्ग’ जैसी डिटर्जेंट से छुटकारा पाने के लिए बहुत उपयोगी और आगे।


8
के बीच का अंतर decomposeऔर extractहै कि बाद रिटर्न बात यह है कि हटा दिया गया था, जबकि पूर्व बस इसे नष्ट कर देता है। तो यह सवाल का अधिक सटीक उत्तर है, लेकिन अन्य तरीके काम करते हैं।
माइक

1
अपघटन स्क्रिप्ट टैग की सामग्री को हटाता नहीं है, यह केवल टैग हटाता है।
रोलैंड पिहलाकास

मैं आपकी दोनों टिप्पणियों से सहमत हूं। यही कारण है कि मैंने ओपी के अनुसार सही उत्तर दिया जो कि removeसामग्री के अनुसार था । अक्सर अनावश्यक टैग और स्वरूपण के HTML की सफाई के लिए उपयोग किया जाता है।
अभिषेक दुजारी

7
वास्तव में, दस्तावेज़ के अनुसार: "Tag.decompose () पेड़ से एक टैग निकाल देता है, तो पूरी तरह से उसे और उसकी सामग्रियों को नष्ट कर देता:" crummy.com/software/BeautifulSoup/bs4/doc/#decompose
jarcobi889

1
@Vangel माफी, मुझे लगता है कि मैं अपनी टिप्पणी में एक उल्लेख जोड़ना भूल गया: मेरा मानना ​​है कि मैं उस टिप्पणी के साथ रोलैंड पिहलाकास का जवाब दे रहा था।
jarcobi889

22

जैसा कि ( आधिकारिक प्रलेखन ) में कहा गया है कि आप extractखोज से मेल खाने वाले सभी उपप्रकार को हटाने के लिए विधि का उपयोग कर सकते हैं ।

import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.