with open('useragent.txt','r+') as y:
h = y.readlines()
useragent = random.choice(h)
user = useragent.replace("\n","")
headers = {}
headers['User-Agent'] = user
q = requests.get(urllib.parse.unquote(url),headers=headers,allow_redirects=True)
soup = BeautifulSoup(q.content,"html.parser")
for a in soup.findAll('div',{'class': 'iframeContainer'}):
for i in a.findAll('iframe'):
link = mediabaglanti(i["src"])
re.sub('<div class="iframeContainer">(.*?)<\/div>',str(link),str(a),flags = re.IGNORECASE)
result = str(soup)
print(result)
Çıktı aldığımda aranan yerlerin değişmediğini görüyorum.Bir mantık hatası yapıyorum ama çözemedim ? re.sub kısmını bir değişkene veya bir boş listeye aktarmaya çalıştım. Bu seferde üst üste eklendiğinden çok fazla tekrar ediyor.
Hocam yüzlerce satır kod var. Kafanızı karıştırmak istemem. Zaten düz mantıkta kod yazan birisiyim. importlar en üstte kalıyor. Benim merak ettiğim re.sub a atama yaptığımda en son değeri değiştiriyor. Bir boş listeye aktardığımda ise aynı kaynak kodunu defalarca yazıdıryor. For içinde olduğundan. Bu tarz durumlarda ne yapacağımı bilmiyorum açıkcası.
Şöyle yapalım o zaman, for a in soup.findAll('div',{'class': 'iframeContainer'}) buradan nasıl bir veri elde ediyorsunuz, birkaç tanesini paylaşın. Sonra for i in a.findAll('iframe'): ifadesiyle nasıl bir veri alıyorsunuz bunu da paylaşın, link değişkenindeki string ifadesi nasıl ona bir bakalım. Yani bütün kodları atmanıza gerek yok. Sorun oluşturan kısmı açık bir hale getirin ki biz de görebilelim yoksa biz bu kodlardan sorunun nereden kaynaklandığını göremeyiz çünkü aldığınız veriyi bilmiyoruz.
Edit: ayrıca @aib’in de dediği gibi re.sub yaptığınız veriyi kullanmıyorsunuz.
Zaten dogrusu soru sorarken problemin temelini gosteren, mumkun oldugunca kucuk ama calisan bir kod parcasi kullanmak.
Mesela burada “dur simdi, request’lerle ugrasmayayim” diyip link ve a’yi sabit birer ornek olarak verseydin:
import re
a = "..."
link = "..."
re.sub('<div class="iframeContainer">(.*?)<\/div>',str(link),str(a),flags = re.IGNORECASE)
print(link)
Sorunun kaynagini muhtemelen kendin de gorebilirdin.
Genelde insanlar bu noktada aliniyor, ama kullandigin dilin de benzer bir etkisi var:
re.sub’a atama (re.sub = ...) yapmiyorsun, re.sub fonksiyonunu cagiriyorsun.
Neyi aktariyorsun? Hangi kaynak kodunu yazdiriyor?
Bakiniz, hemen ilk konuya bagliyorum:
Hani, nerede? Kodunu gorseydik yardim edebilirdik, simdi yapmaya calistigin ve ortada kaniti olmayan bir seyin ne oldugunu tahmin etmeye calisiyoruz. Dogru tahmin edebilirsek, cozumu de dogru tahmin etme sansimiz olacak.
Şöyle bir yol tarif etmeye çalışayım size, siz bu kodları kendinize göre düzenleyin olur mu? Eldeki verilerle başka türlü nasıl yardımcı olabiliriz bilmiyorum.
Kodu parcalara ayirip dusunebilmen / inceleyebilmen / sorabilmen lazim.
Su 4 satir neyi amacliyor mesela.
Hangi datada nasil degisiklikler yapmasi lazim.
Cozumu 1 hafta sonra gelecek olsa, kod yazmaya bugun devam edebilmen icin buraya nasil gecici bir kod yazarsin.
Buradan yukarida bir hata olsa ve cozumu 2 hafta sonra gelecek olsa, bu kismin calistigindan emin olmak icin yukaridaki 99 satiri nasil gecici bir kodla degistirirsin.
-veya-
Internet baglantin kesilmek uzere olsa ve 2 gun boyunca requests kullanamayacak olsan, kod yazmaya devam edebilmek icin neler yaparsin.
Src içeriğini alıp request ile kaynaktan twitter post linkini alıyorum. Src içeriği dinamik. Buraya kadar sorun yok zaten. Daha sonra
div class=“iframeContainer”> bloğunu kendi linkimle değiştirmek ve değiştirdiğim içeriği string olarak çıktı almak istiyorum. Çünkü bu string html kaynağını kullanmaya devam edeceğim.
Yukarıdaki bloğu komple değiştirmek amaçım. re kullanmadan nası değiştireceğim hocam. Aşağıdaki kod biraz işe yarıyor fakat benim işimi görmüyor. Ben komple iframeContainer içeriğini alıp değiştirmem lazım kısacası.
q = requests.get(urllib.parse.unquote(wayurl),headers=headers,allow_redirects=True)
soup = BeautifulSoup(q.content,"html.parser")
#bu çalışıyor ama yetersiz.
for a in soup.findAll('iframe'):
link = mediabaglanti(a["src"]) #youtube video linki ve twitter post linkleri döndürür.
a['src'] = a['src'].replace(a["src"], link)
result = str(soup)
print(soup)
Mesala böyle denemelerimde oldu. Fakat değiştirmiyor.
re içeriğini bir boş bir diziye atadığım zaman for içinde aynı kaynak kodu iki sefer yazdırıyor. Normal bir değişkene atadığım zamanda en son işlemi yapıyor. Halbuki kaynakta 2 tane iframe var
Hocam ne alakası var anlamadımki, adetlerle benim işim yok. Binlerce medya öğesi var. Dinamik şekilde olduğunu belirttim. Hepsini bulup kaç tane varsa artık değiştirmek linklerle amaçım bu yani
Hoşcakalın
Estağfurullah, problemle alakalı bir yanlış anlaşılma oldu sanırım. Keşke “kodlar şunlar, bu kodlarla şöyle bir çıktı alıyorum. ama benim almak istediğim çıktı şu şekilde. bunu da bir türlü yapamadım.” şeklinde bir diyalog gerçekleşseydi, belki daha rahat yardımcı olabilirdik.