2015-10-15 7 views
6

This question से चार साल पहले पूछा गया था, लेकिन उत्तर अब बीएस 4 के लिए पुराना है।सुंदर सूप

मैं सुंदर सूप का उपयोग करके अपनी एचटीएमएल फाइल में सभी टिप्पणियों को हटाना चाहता हूं। चूंकि BS4 प्रत्येक comment as a special type of navigable string बनाता है, मैंने सोचा था कि इस कोड काम करेगा:

for comments in soup.find_all('comment'): 
    comments.decompose() 

तो उससे बात नहीं बनी .... मैं कैसे सभी टिप्पणियों BS4 का उपयोग कर मिल सकती है?

सबसे पहले, जब ब्यूटीफुल सूप का आयात

दूसरा, यहाँ टिप्पणी

for comments in soup.findAll(text=lambda text:isinstance(text, Comment)): 
    comments.extract() 
+0

यह [उत्तर] (http://stackoverflow.com/a/3507360/771848) मुझे अभी भी काम करना चाहिए। – alecxe

+0

मुझे "वैश्विक नाम" टिप्पणी "परिभाषित नहीं किया जा रहा है" – Joseph

+1

मुझे एहसास है कि यह पुराना है, लेकिन @ जोसेफ, यदि आप बीएस 4 से टिप्पणी आयात करते हैं तो इसे – atarw

उत्तर

8

आप find_all करने के लिए एक समारोह पारित कर सकते हैं निकालने के लिए कोड है:

+0

मुझे खुशी है कि मुझे आपका जवाब मिला, धन्यवाद! किसी भी विचार से लैंबडा का उपयोग किए बिना हम इसे कैसे लिख सकते हैं? – JinSnow

6

दो बातें मुझे क्या करने की जरूरत है() यह जांचने में सहायता के लिए कि स्ट्रिंग एक टिप्पणी है या नहीं।

उदाहरण के लिए मैं एचटीएमएल नीचे है:

<body> 
    <!-- Branding and main navigation --> 
    <div class="Branding">The Science &amp; Safety Behind Your Favorite Products</div> 
    <div class="l-branding"> 
     <p>Just a brand</p> 
    </div> 
     <!-- test comment here --> 
     <div class="block_content"> 
      <a href="https://www.google.com">Google</a> 
    </div> 
</body> 

कोड:

from bs4 import BeautifulSoup as BS 
from bs4 import Comment 
.... 
soup=BS(html,'html.parser') 
comments=soup.find_all(string=lambda text:isinstance(text,Comment)) 
for c in comments: 
    print c 
    print "===========" 
    c.decompose() 

उत्पादन होगा:

Branding and main navigation 
============ 
test comment here 
============ 

Btw, मैं कारण लगता है कि क्यों find_all('Comment') नहीं है काम है (सुंदर सूप दस्तावेज़ से):

नाम के लिए मूल्य में पास करें और आप सुंदर सूप को केवल कुछ नामों के साथ टैग पर विचार करने के लिए बताएंगे। टेक्स्ट स्ट्रिंग को अनदेखा कर दिया जाएगा, जैसा कि टैग टैग करेगा जिनके नाम मेल नहीं खाते हैं।