Replace işlemini bir türlü yapmıyor ? Çözemedim

from bs4 import BeautifulSoup as BS

text = """
<div class="iframeContainer"><iframe allowfullscreen="" data-media-id="8f8d922ab171cff4a70e334c1cc075a4" frameborder="0" height="250" src="https://domain.com/media/8f8d922ab171cff4a70e334c1cc075a4?postId=fffa11509f28" width="700"></iframe></div>
<div class="iframeContainer"><iframe allowfullscreen="" data-height="480" data-media-id="42de5f2a9a86208d9c1d6c9879edf9b3" data-width="854" frameborder="0" height="393" src="https://domain.com/media/42de5f2a9a86208d9c1d6c9879edf9b3?postId=fffa11509f28" width="700"></iframe></div>
"""


soup = BS(text, "html.parser")

for frame in soup.findAll("iframe"):
    link = frame["src"]
    ...
    frame["src"] = "yeni link"

result = str(soup)
print(soup)

Yukarıdaki kodun çıktısı bu:

<div class="iframeContainer"><iframe allowfullscreen="" data-media-id="8f8d922ab171cff4a70e334c1cc075a4" frameborder="0" height="250" src="yeni link" width="700"></iframe></div>
<div class="iframeContainer"><iframe allowfullscreen="" data-height="480" data-media-id="42de5f2a9a86208d9c1d6c9879edf9b3" data-width="854" frameborder="0" height="393" src="yeni link" width="700"></iframe></div>

Siz benim kodda kullandığım HTML içeriğinin işlemin sonunda hangi halde olmasını istiyorsunuz? Elde etmek istediğiniz içeriği de örnek olarak verin lütfen.

Hocam teşekkürler cevabınız için

Çıktı aynen aşağıdaki şekilde olucak.


<div><a href="https://domain.com/media/8f8d922ab171cff4a70e334c1cc075a4?postId=fffa11509f28">domain</div>
<div><a href="https://domain.com/media/42de5f2a9a86208d9c1d6c9879edf9b3?postId=fffa11509f28">domain</div>


Yani mevcut src leri ilk önce almak lazım. Aldıktan sonrada yukarıdaki şekilde komple iframe bloklarını değiştirmek amaçım.

Tamam, bize bunu en başta söylemeniz lazımdı :slightly_smiling_face: Burafaki domain dediğiniz yerler o şekilde kalacak, değil mi?

Domain dediğim yerler aslında öyle kalmayacak. Ama ben o tarafını hallediyorum zaten. Siz yukarıdaki şekilde çıktı alabilirseniz sorunum çözülmüş olur hocam. Çünkü ben yapamadım açıkcası. Bilmediğim noktalar var.

Ben şuan bilgisayara oturamadığım için kod atamayacağım, ama kısa bir sürede cevap alırsınız diye tahmin ediyorum.

1 Beğeni

Hocam yazan olmuyor. Rica etsem tarif edebilirmisiniz ?

İhtiyacınız olan şey replaceWith metodu. Bu linki inceleyebilirsiniz:

1 Beğeni

İnceliyorum hocam teşekkürler.

Oldu hocam çok teşekkürler :slight_smile: replace_with özelliğini bilmiyordum yeni öğrendim. Bu özellikleri öğrenebileceğim bir Türkçe kaynak varmı acaba ? Kaç gündür sıkıntı çekiyorum. Türkçe yoksa yabancı kaynata önerebilirseniz çok menmun olurum. Allah razı olsun hocam sağol. Birde html ler bozuk çıkıyor.

text =  """
<html>
<head>
</head>
<body>

<div> <p>icerik</p>

<div class="iframeContainer"><iframe allowfullscreen="" data-media-id="8f8d922ab171cff4a70e334c1cc075a4" frameborder="0" height="250" src="https://domain.com/media/8f8d922ab171cff4a70e334c1cc075a4?postId=fffa11509f28" width="700"></iframe></div>
<div class="iframeContainer"><iframe allowfullscreen="" data-height="480" data-media-id="42de5f2a9a86208d9c1d6c9879edf9b3" data-width="854" frameborder="0" height="393" src="https://domain.com/media/42de5f2a9a86208d9c1d6c9879edf9b3?postId=fffa11509f28" width="700"></iframe></div>


</body>
</html>
"""
from bs4 import BeautifulSoup

soup = BeautifulSoup(text, 'html.parser')
for a in soup.findAll('iframe'):
    link = a['src']
    
    yeni  = '<div><a href="'+link+'">domain</a></div>'
    soup.find('div',{'class':'iframeContainer'}).replace_with(yeni)

print(soup)

Çıktı

<html>
<head>
</head>
<body>
<div> <p>icerik</p>
&lt;div&gt;&lt;a href="https://domain.com/media/8f8d922ab171cff4a70e334c1cc075a4?postId=fffa11509f28"&gt;domain&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="https://domain.com/media/42de5f2a9a86208d9c1d6c9879edf9b3?postId=fffa11509f28"&gt;domain&lt;/a&gt;&lt;/div&gt;
</div></body>
</html>

Çünkü siz HTML inject ediyorsunuz, Tag kullanmanız lazım. Bu örneği inceleyin:


Ben rastlamadım, ama böyle konularda kütüphanenin kendi belgelerine göz atabilirsiniz:

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

1 Beğeni