2014-12-01 23 views
6

'in etiketleriyle bir türdeki etiketlerin değiştirilmesi Bir HTML dosyaları koleksiyonum var. Belirli bir sınıfın işaretini düzenleyerek, birer birer üzerinde tekrarlamak istiyorum. hep aynı Bu yerine "Başka bir yerde beni koy" farklı metinle birlikte aynı belgede birden çok kez ortaya çıkabilirBeautifulSoup

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

ama: Ben düzenlemek istediğiniz kod aşağıdaki sınıf adları kullanarak, aşağıdaki formu olduğunu sınıflar.

Bu formun olmak değiştirmek istediğiniz

: Çok emin

<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"}) 

yerde değil bu peşine ya da ne kadar etiketler dizisi ile başa? Herhangi bir yardım çok takdir edilecektir. Teşekkürler :)

+0

HTML,

öğelerinde çocuklara göre bazı kısıtlamalara sahiptir. Yalnızca etiketlerini değiştirmeyi düşünebilirsiniz. Öznitelikleri nedeniyle
'u silmeniz gerekirse, bunları no'lu bir düzenekle değiştirmek, bunları tamamen silmekten daha iyi olur. – tiffon

cevap

4

Çok daha iyi ve thisIsMyClass sınıfıyla tüm td etiketlerini bulmak, bir yer tutucu ile yerini alan HTML dizesini hazırlamak ve her yerine .replace_with() kullanmak olacaktır daha güzel:

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() 

Baskı:

<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 özniteliğine atamak kadar basit.

# 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> 

Ayrıca documentation arkadaşınız. Oldukça kapsamlı.