2014-12-01 8 views
6

में किसी अन्य के टैग के साथ एक प्रकार के टैग को प्रतिस्थापित करना मेरे पास HTML फ़ाइलों का संग्रह है। मैं उन पर एक-एक करके, एक विशेष वर्ग के मार्क-अप को संपादित करना चाहता हूं। एक ही है,सुंदर सूप

<td class='thisIsMyClass' colspan=4> 
    <a id='123' class='thisIsMyOtherClass' href='123'>Put me Elsewhere</a> 

यह बजाय "मुझे कहीं रखो" के विभिन्न पाठ के साथ, एक ही दस्तावेज़ में कई बार हो सकता है, लेकिन हमेशा: कोड मैं संपादित करना चाहते हैं निम्नलिखित फार्म की है निम्नलिखित वर्ग पर उनके नाम, कक्षाएं।

मैं इस रूप में होने के लिए बदलना चाहते हैं: भी यकीन है कि

<font SIZE="3" COLOR="#333333" FACE="Verdana" STYLE="background-color:#ffffff;font-weight: bold;"> 
    <h2>Put Me Elsewhere</h2> 
</font> 
import os 
for filename in os.listdir('dirname'): 
replace(filename) 

def replace(filename): 
tags = soup.find_all(attrs={"thisIsMyClass"}) 

नहीं, जहां इस के बाद जाने के लिए या कैसे टैग सरणी से निपटने के लिए? कोई भी सहायताकाफी प्रशंसनीय होगी। धन्यवाद :)

+0

एचटीएमएल

तत्वों में बच्चों के आस-पास कुछ प्रतिबंध हैं। आप केवल टैग को प्रतिस्थापित करने पर विचार करना चाहेंगे। यदि आपको
को उनके गुणों के कारण मिटा देना है, तो उन्हें एक सादे के साथ बदलना उन्हें पूरी तरह से हटाने से बेहतर होगा। – tiffon

उत्तर

4

बहुत बेहतर और अधिक सुंदर एक प्लेसहोल्डर के साथ एक प्रतिस्थापन एचटीएमएल स्ट्रिंग तैयार, thisIsMyClass वर्ग के साथ सभी td टैग खोजने के लिए और .replace_with() का उपयोग प्रत्येक को बदलने के लिए किया जाएगा:

from bs4 import BeautifulSoup 

data = """ 
<table> 
    <tr> 
     <td class='thisIsMyClass' colspan=4> 
      <a id='123' class='thisIsMyOtherClass' href='123'>Put me Elsewhere</a> 
     </td> 
    </tr> 
</table> 
""" 

replacement = """ 
<font SIZE="3" COLOR="#333333" FACE="Verdana" STYLE="background-color:#ffffff;font-weight: bold;"> 
    <h2>{text}</h2> 
</font> 
""" 

soup = BeautifulSoup(data, 'html.parser') 
for td in soup.select('td.thisIsMyClass'): 
    td.replace_with(BeautifulSoup(replacement.format(text=td.a.text), 'html.parser')) 

print soup.prettify() 

प्रिंटों:

<table> 
    <tr> 
     <font color="#333333" face="Verdana" size="3" style="background-color:#ffffff;font-weight: bold;"> 
      <h2> 
      Put me Elsewhere 
      </h2> 
     </font> 
    </tr> 
</table> 
1

यह name विशेषता को असाइन करने जितना आसान है।

# for quick testing: 
# tag = BeautifulSoup("<td class='thisIsMyClass' colspan=4><a id='123' class='thisIsMyOtherClass' href='123'>Put me Elsewhere</a>") 
# tags = [tag] 
for tag in tags: 
    tag.td.name = "font" 
    tag.font["SIZE"] = 3 
    del tag.font["class"] 
    ... 
    tag.a.name = "h2" 
    ... 
    print(tag) 
    # <font SIZE="3" colspan="4"><h2 class="thisIsMyOtherClass" href="123" id="123">Put me Elsewhere</h2></font> 

इसके अलावा documentation अपने दोस्त है। यह काफी व्यापक है।