import requests
from bs4 import BeautifulSoup
r = requests.get("https://instagram.com/{}".format(myusername))
soup = BeautifulSoup(r.content,"html.parser")
counts = soup.find_all("span", attrs={"class":"g47SY"})
print(counts)
kodum bu sayfa kaynağını selenium modülündeki driver.page_source şeklinde alınca r değişkeninden sonraki kısım sorunsuz çalışıyor fakat selenium bodülünde çok fazla zaman kaybı yaşadığım için bu şekilde yapmak istemiyorum yukarıdaki verdiğim kodda aldığım çıktı şu şekilde
[]
yani sorun burdaki find_all() metodunda fakat dediğim gibi başka bir scriptimde aynı kod sorunsuz çalışıyor. yardımcı olabilir misiniz ?
yazımı okumadınız galiba etiket ve class tamamen doğru diğer scriptimde çalışıyor tek fark r değişkenini diğer scriptimde selenium modülündeki driver.page_source ile almam bu scripte ise requests modülünün get() fonksiyonunu kullanıyorum.
requests ile sayfa kaynağını alabiliyorum ama find_all() metodunda bulunmuyor. Ve kinetik yükleme durumu da söz konusu değil. Javascript konusunda emin değilim fakat kullanıldığını düşünmüyorum. Çünkü html kaynağında görebiliyorum aradığım elementi.
kodu alıp çalıştırın myusername yazan kısma kendi kullanıcı adınızı yazıp deneyebilirsiniz instagramdaki post,takipçi,takip edilenler sayılarını almak için kullanılıyor. 3 tane aynı class’a sahip span etiketi ver her biri post takipçi veya takip edilenlerin bilgisini tutuyor counts[0].text diyerek post sayısına ulaşabiliyordum mesela ama requests modülünde olmadı.
Cevabı en yukarıda @EkremDincel vermiş. Selenium’da alabildiğiniz verileri requests ile alamıyorsanız demek ki veriler dinamik olarak yükleniyor. Bir kullanıcı ismi ile deneyip kaynak kodu dosyaya yazdırdım ve g47SY ifadesini kaynak kodda aradım, malesef yok. Yani dinamik olarak yüklendiği kesin.
En az bir paylaşımı olan kullanıcıların bilgilerini meta etiketi ile alabilirsiniz.
import requests
from bs4 import BeautifulSoup
r = requests.get("https://instagram.com/{}".format(USERNAME))
parser = BeautifulSoup(r.content,"html.parser")
element = parser.find("meta",{"property":"og:description"})
bilgiler = element.get("content").split(", ")
takipci = bilgiler[0]
takip_edilen = bilgiler[1].strip()
post_sayisi = bilgiler[2].split("-")[0].strip()
print(takipci)
print(takip_edilen)
print(post_sayisi)
çok teşekkür ederim kod çok iyi ve hızlı çalışıyor ayrıca bir düzeltme yapmak istiyorum en az bir paylaşımı olmasına gerek yok kod düzgün çalışıyor teşekkür ederim cevabınız için iyi günler dilerim