पाइथन का उपयोग कर <script>
और </script>
के बीच टेक्स्ट को कैसे निकालें?पाइथन का उपयोग कर <script> और</script> के बीच टेक्स्ट को कैसे निकालें?
उत्तर
आप के साथ HTMLParser मॉड्यूल (जटिल) यह कर सकते हैं या रेगुलर एक्सप्रेशन का उपयोग:
import re
content = "asdf <script> bla </script> end"
x=re.search("<script>.*?</script>", content, re.DOTALL)
span = x.span() # gives (5, 27)
stripped_content = content[:span[0]] + content[span[1]:]
संपादित करें: re.DOTALL, धन्यवाद tgray को
मैं अजगर काफी अच्छा बताने के लिए पता नहीं है आप एक समाधान लेकिन यदि आप उपयोगकर्ता इनपुट को स्वच्छ करने के लिए इसका उपयोग करना चाहते हैं तो आपको बहुत सावधान रहना होगा। चीजों को हटाने और बस सब कुछ पकड़ नहीं है। शायद आप मौजूदा समाधानों पर एक नज़र डाल सकते हैं (मुझे लगता है कि Django इस तरह कुछ शामिल है)।
आप इस (और अन्य) के साथ BeautifulSoup उपयोग कर सकते हैं तरीके:
soup = BeautifulSoup(source.lower())
to_extract = soup.findAll('script')
for item in to_extract:
item.extract()
यह वास्तव में HTML से नोड्स निकाल देता है। यदि आप खाली <script></script>
टैग छोड़ना चाहते हैं तो आपको सूप से निकालने के बजाय item
विशेषताओं के साथ काम करना होगा।
यह सही जवाब है। निलोय, या कोई भी इस प्रश्न को पढ़ने वाले, कृपया इस मामले में नियमित अभिव्यक्तियों का उपयोग करने के लिए वकालत करने वाले किसी भी उत्तर को अनदेखा करें क्योंकि उनके पास _serious_ है, आसानी से शोषण योग्य सुरक्षा समस्याएं हैं। –
मैं @DrJokepu से सहमत हूं। नियमित अभिव्यक्तियों के साथ एचटीएमएल पार्स करने की कोशिश मत करो! वर str = "
example_text = "This is some text <script> blah blah blah </script> this is some more text."
import re
myre = re.compile("(^.*)<script>(.*)</script>(.*$)")
result = myre.match(example_text)
result.groups()
<52> ('This is some text ', ' blah blah blah ', ' this is some more text.')
# Text between <script> .. </script>
result.group(2)
<56> 'blah blah blah'
# Text outside of <script> .. </script>
result.group(1)+result.group(3)
<57> 'This is some text this is some more text.'
ध्यान दें कि (। * $)") के माध्यम से फिसल जाएगा पकड़ लो। –
आप किसी भी मॉड्यूल का आयात करने के लिए नहीं करना चाहते हैं:
string = "<script> this is some js. begone! </script>"
string = string.split(' ')
for i, s in enumerate(string):
if s == '<script>' or s == '</script>' :
del string[i]
print ' '.join(string)
फिर से, lol'; आदि? –
खैर, वह कहा ""। – sqram
जवाब PEV और wr द्वारा पोस्ट की गई के अनुसार, क्यों एक रेगुलर एक्सप्रेशन के उन्नयन के लिए नहीं, जैसे:
pattern = r"(?is)<script[^>]*>(.*?)</script>"
text = """<script>foo bar
baz bar foo </script>"""
re.sub(pattern, '', text)
(? है) - मामले को अनदेखा करने और पाठ में नई लाइनों को अनुमति देने के लिए जोड़ा गया। इस संस्करण को विशेषताओं के साथ स्क्रिप्ट टैग का भी समर्थन करना चाहिए।
संपादित करें: मैं अभी तक कोई टिप्पणी नहीं जोड़ सकता, इसलिए मैं बस अपना जवाब संपादित कर रहा हूं। मैं पूरी तरह से नीचे टिप्पणी के साथ सहमत हूं, regexps ऐसे कार्यों के लिए पूरी तरह से गलत हैं और बी। सूप ओटी एलएक्सएमएल बहुत बेहतर है। लेकिन सवाल पूछा गया कि सिर्फ एक साधारण उदाहरण दिया गया है और इस तरह के सरल कार्य के लिए regexps पर्याप्त होना चाहिए। एक साधारण पाठ हटाने के लिए सुंदर सूप का उपयोग करना बहुत अधिक हो सकता है (अधिभार? मैं नहीं जानता कि मेरा मतलब क्या व्यक्त करना है, मेरी अंग्रेजी क्षमा करें)।
BTW मैं एक गलती की है, कोड इस तरह दिखना चाहिए:
pattern = r"(?is)(<script[^>]*>)(.*?)(</script>)"
text = """<script>foo bar
baz bar foo </script>"""
re.sub(pattern, '\1\3', text)
के बारे में कैसे?कैसे
आप XSS रोकने का प्रयास कर रहे हैं? बस <script>
टैग को खत्म करने से सभी संभावित हमलों को हल नहीं किया जाएगा! यहां कई तरीकों की एक महान सूची दी गई है (उनमें से कुछ बहुत रचनात्मक) कि आप http://ha.ckers.org/xss.html कमजोर हो सकते हैं। इस पृष्ठ को पढ़ने के बाद आपको समझना चाहिए कि नियमित अभिव्यक्ति का उपयोग करके <script>
टैग को समाप्त करना क्यों पर्याप्त मजबूत नहीं है। पायथन लाइब्रेरी lxml में ऐसा फ़ंक्शन है जो आपके HTML को दृढ़ता से साफ करने के लिए इसे सुरक्षित बनाएगा।
तो आप यह सुनिश्चित करें कि आप सिर्फ <script>
टैग को खत्म करना चाहते हैं lxml में इस कोड को काम करना चाहिए रहे हैं:
from lxml.html import parse
root = parse(filename_or_url).getroot()
for element in root.iter("script"):
element.drop_tree()
नोट: मैं नियमित expresions का उपयोग करके सभी समाधान downvoted। यहाँ देखें क्यों आप नियमित अभिव्यक्ति का उपयोग करके HTML पार्स नहीं करना चाहिए: Using regular expressions to parse HTML: why not?
नोट 2: एक और एसओ दिखा सवाल एचटीएमएल कि नियमित अभिव्यक्ति के साथ पार्स करने के लिए असंभव है: Can you provide some examples of why it is hard to parse XML and HTML with a regex?
Element Tree सबसे अच्छा सरल और मधुर पैकेज है यह करने के लिए। हां, इसे करने के अन्य तरीके भी हैं; लेकिन किसी भी 'coz वे चूसना का उपयोग न करें! (मार्क तीर्थ के माध्यम से)
- 1. Jquery का उपयोग कर अंतिम <li></li> को कैसे निकालें?
- 2. सामान्यीकरण का उपयोग कर रिडंडेंसी कैसे निकालें?
- 3. पाइथन का उपयोग करके स्ट्रिंग से यूआरएल कैसे निकालें?
- 4. PHP का उपयोग कर स्ट्रिंग से सबस्ट्रिंग को कैसे निकालें?
- 5. reflection.emit का उपयोग कर स्पष्ट इंटरफ़ेस कार्यान्वयन को कैसे निकालें?
- 6. Regex.Replace का उपयोग कर स्ट्रिंग से संख्याओं को कैसे निकालें?
- 7. विशिष्ट टेक्स्ट लाइनों को निकालें?
- 8. एंड्रॉइड में EditText के टेक्स्ट ऑनफोकस को कैसे निकालें?
- 9. पाइथन का उपयोग करके ज़िपफाइल निकालें, प्रगति प्रतिशत प्रदर्शित करें?
- 10. टेक्स्ट से JSON निकालें
- 11. php में टैग के बीच पाठ को कैसे निकालें?
- 12. रूबी रेगेक्स: उद्धरण के बीच पाठ निकालें
- 13. जावास्क्रिप्ट का उपयोग कर स्ट्रिंग से रिक्त स्थान कैसे निकालें?
- 14. XSLT का उपयोग कर स्ट्रिंग से विशेष वर्ण कैसे निकालें?
- 15. वर्चुअल टेक्स्ट का उपयोग वर्चुअल टेक्स्ट 2
- 16. स्ट्रिंग के बीच में सफेद स्पेस वर्णों को कैसे निकालें?
- 17. जैस्पर रीपॉर्ट्स में टेक्स्टफील्ड के बीच अतिरिक्त जगह कैसे निकालें?
- 18. जावास्क्रिप्ट या jquery का उपयोग कर अतिरिक्त सफेद रिक्त स्थान को कैसे निकालें?
- 19. हाइपरलिंक निकालें लेकिन टेक्स्ट रखें?
- 20. तीन.जेएस का उपयोग कर दो रंगों के बीच कैसे जुड़ें?
- 21. टेक्स्ट से टेक्स्ट निकालें, लेटेक्स टैग
- 22. पाइथन का उपयोग कर वेब स्क्रैपिंग डेटा?
- 23. क्या स्ट्रीम के बीच का अंतर "<<" और लिखें
- 24. एक सजावट का उपयोग कर पाइथन लॉगिंग
- 25. मैं HTML का उपयोग कर पाठ के ओवरलैपिंग सेगमेंट के बीच अंतर कैसे कर सकता हूं?
- 26. ConcurrentBag <> से एकल, विशिष्ट ऑब्जेक्ट को कैसे निकालें?
- 27. सूची <int> से नकारात्मक मानों को कैसे निकालें?
- 28. विस्तार विधियों का उपयोग कर सी # में सूची <T> से किसी प्रकार के प्रकार की वस्तुओं को निकालें?
- 29. एसडब्ल्यूआईजी का उपयोग कर पाइथन सूची के रूप में std :: vector <int> का पर्दाफाश कैसे करें?
- 30. मैं xsl: टेक्स्ट टैग के बीच टेक्स्ट कैसे प्रारूपित करूं?
इस मामले में जैसी चीजों के बारे में संभावित मुद्दों के बहुत सारे है, चाहे स्क्रिप्ट टैग गुण होते हैं, संभवतः पाठ, आदि के टुकड़े यह मज़बूती से सभी विकल्पों को कवर करने के लिए यह बहुत आसान मौजूदा उपयोग करने के लिए कर रही है बहुत मुश्किल है भाग निकले , सुंदर सूप जैसे परीक्षण, पुस्तकालयों। – mavnn
तुम इतनी 'डॉट' चरित्र नई-पंक्तियों से मेल खाता है अपनी खोज के re.DOTALL/re.S झंडा जोड़ सकते हैं। इसके बिना, आप स्क्रिप्ट ब्लॉक से मेल नहीं खाएंगे जो कई लाइनों (जो उनमें से अधिकतर हैं) का विस्तार करते हैं। – tgray
दुर्भाग्यपूर्ण है कि एक वैध उत्तर मतदान हो जाता है; यह निश्चित रूप से आवश्यक चश्मे को पूरा करता है। क्या यह –