আমি কি বিউটিফুলসপ দিয়ে স্ক্রিপ্ট ট্যাগগুলি সরাতে পারি?


94

স্ক্রিপ্ট ট্যাগগুলি এবং তার সমস্ত বিষয়বস্তু HTML থেকে বিউটিফুলসপ দিয়ে মুছে ফেলা যায়, বা আমাকে কি নিয়মিত এক্সপ্রেশন বা অন্য কিছু ব্যবহার করতে হবে?

উত্তর:


166
>>> 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.extract () ইন স্যুপের জন্য ('iframe')]] এবং আরও , তবে আমি যদি তাদের মতো চেইন করি তবে [স.সেক্সট্র্যাক্ট () এর স্যুপ ইন ('iframe', 'স্ক্রিপ্ট')] রাখবেন না।
ইলা

8
@ অলি আপনাকে নোটটি ব্যবহার করতে হবে [s.extract() for s in soup(['iframe', 'script'])]নোট করুন যে একাধিক ট্যাগ ব্যবহার করতে প্যারামিটারের তালিকা থাকতে হবে
ফেব্বিও ডিনিজ

: @ FábioDiniz আমি ভালো কিছু কিভাবে বের হবে '<script class="blah">a</script>baba<script id="blahhhh">b</script>'? এটা কি একই?
ব্যবহারকারী 2883071

4
এই অপারেশনের পরে স্যুপ অবজেক্টটি অকেজো হয়ে যায়, কোনও ট্যাগ আর খুঁজে পাওয়া যায় না।
ইমরেক

4
এটি পুরানো, বিউটিফুলসপ এখন স্ট্রিংটি এইচটিএমএলে ফর্ম্যাট করে বলে মনে হচ্ছে:<html><head></head><body><p>baba</p></body></html>
ক্লক

38

যাদের ভবিষ্যতের রেফারেন্সের প্রয়োজন হতে পারে তাদের জন্য আপডেট উত্তর: সঠিক উত্তরটি। 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>'

'স্ক্রিপ্ট', 'আইএমজি' এর মতো আরও অনেক কিছু থেকে মুক্তি পেতে খুব দরকারী rid


9
decomposeএবং এর মধ্যে পার্থক্যটি extractহ'ল পরেরটি মুছে ফেলা জিনিসটিকে ফিরিয়ে দেয়, তবে পূর্ববর্তী কেবল এটি ধ্বংস করে দেয়। সুতরাং এটি প্রশ্নের আরও সুনির্দিষ্ট উত্তর, তবে অন্যান্য পদ্ধতিগুলি কাজ করে।
মাইক 15

4
পচে যাওয়া স্ক্রিপ্ট ট্যাগগুলির সামগ্রী সরিয়ে দেয় না, এটি কেবল ট্যাগগুলি সরিয়ে দেয়।
রোল্যান্ড পিহলাকাস

আমি আপনার উভয় মন্তব্যের সাথে একমত। যে কারণে আমি ওপি অনুযায়ী সঠিক উত্তরটি বলেছিলাম যা removeবিষয়বস্তু ছিল । অপরিবর্তিত ট্যাগ এবং ফর্ম্যাটিংয়ের এইচটিএমএল পরিষ্কার করার জন্য প্রায়শই ব্যবহৃত হয়।
অভিষেক দুজারি

7
প্রকৃতপক্ষে, ডকুমেন্টেশন অনুসারে: "Tag.decompose () গাছ থেকে একটি ট্যাগ সরিয়ে দেয়, তারপরে এটি এবং এর সামগ্রীগুলি সম্পূর্ণরূপে ধ্বংস করে দেয়:" crummy.com/software/BeLiveSoup/bs4/doc/#decompose
jarcobi889

4
@ ভ্যাঞ্জেল ক্ষমা প্রার্থনা, আমি মনে করি আমি আমার মন্তব্যে একটি উল্লেখ যোগ করতে ভুলে গেছি: আমি বিশ্বাস করি যে আমি এই মন্তব্য দিয়ে রোল্যান্ড পিহলাকাসকে সাড়া দিয়েছিলাম।
jarcobi889

23

( অফিশিয়াল ডকুমেন্টেশন ) এ বর্ণিত হিসাবে আপনি extractঅনুসন্ধানের সাথে মেলে এমন সমস্ত সাবট্রি সরানোর জন্য পদ্ধতিটি ব্যবহার করতে পারেন ।

import BeautifulSoup
a = BeautifulSoup.BeautifulSoup("<html><body><script>aaa</script></body></html>")
[x.extract() for x in a.findAll('script')]

নির্দিষ্ট শ্রেণীর সাথে ট্যাগ সরানোর কোনও উপায় আছে কি? আমি একই নামে সমস্ত ট্যাগ মুছে ফেলতে চাই না, তবে নির্দিষ্ট শ্রেণীর সাথে কেবল একটি ট্যাগ ব্লক।
মুলাইক্সি

আপনাকে যা করতে হবে তা হ'ল কল extractকরার জন্য নির্দিষ্ট উপাদান নির্বাচন করা। [x.extract() for x in a.select('span.className')]
এডওয়ার্ড রেজথার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.