Merhaba;
bir indirme sitesinden dosya indirmek istiyorum. Linki tıkladığım anda normalde dosya hemen iniyor başka bir işlem yapmaya gerek kalmadan ancak bunu pythona aktaramadım. Requets, urllib3 ve mechanicalsoup ile denedim siteye bağlantı sağladım ama dosya inmedi. Bu sorunu nasıl çözebilirim?
Merhaba;
import urllib.request urllib.request.urlretrieve("http://www.google.com/favicon.ico", "/home/erdem/İndirilenler/MyIcon.ico")
urllib.request.urlretrieve("link", "Kaydedilecek dizin")
Çok güzel çalışıyor.
Bend çalışmıyor siz sitede bulunan bir veriyi indiriyorsunuz ben anlatamadım demek istediğim daha doğrusu çalıştırmak istediğim link http://www.convertmp3.io/fetch/?video=https://www.youtube.com/watch?v=9UXSWpHlhFc (Mp3 indirme sitesi) bu bu linke bağlanınca hata veriyor.
Hımm… aynen öyle. Aşağıdaki hatayı verdi:
Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python3.6/urllib/request.py", line 248, in urlretrieve with contextlib.closing(urlopen(url, data)) as fp: File "/usr/lib/python3.6/urllib/request.py", line 223, in urlopen return opener.open(url, data, timeout) File "/usr/lib/python3.6/urllib/request.py", line 532, in open response = meth(req, response) File "/usr/lib/python3.6/urllib/request.py", line 642, in http_response 'http', request, response, code, msg, hdrs) File "/usr/lib/python3.6/urllib/request.py", line 570, in error return self._call_chain(*args) File "/usr/lib/python3.6/urllib/request.py", line 504, in _call_chain result = func(*args) File "/usr/lib/python3.6/urllib/request.py", line 650, in http_error_default raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbidden
Siteye ilk bağlandığımda direk şarkıyı indirdi. İkinci bağlanmamda site açıldı ve download butonu geldi. Farklı bir dönüştürücü ile dener misiniz? Direkt dönüştürüp mp3 dosyasına yönlendirme yapan bir dönüştürücü ile.
yapmak istediğiniz şey çok basit
``` import requests url = 'http://google.com/favicon.ico' r = requests.get(url) open('google.ico', 'wb').write(r.content)
bu kadar
pythonu çalıştırdığınız dosyaya gidin ve bakın mp3 dosyanız nerde mesela mp3 indirecekseniz sonuna .mp3 koymanız gerekiyor img indiricekseniz yazılacak dosyanın sonunda .img yazmalısınız dosya uzantısını siz belirliyorsunuz
Bu da olabilir. Biraz daha uzun yol.
Peki neden
requests.post değil de
requests.get kullandınız? Metotlar fark eder mi?
Bu arada benim verdiğim kod da tam olarak sizin yaptığınızın kısaltılmış hali. Yani yine aynı hatanın alınması muhtemel.
Dosyayı açık bırakmışsınız, open sınıfı ile açarken nesneyi saklayın ki sonradan kapatabilesiniz.
Bu şekilde de inen dosya çalışmıyor bu yöntemi de denemiştim.
bu yöntem ile birsürü resim indirmişliğim var pythonun requests modülünü incelerseniz neden get kullandığımı anlarsınız kısaltılmış hali felan değil content dosyasını okuyup içerisine yazmak.
requests modülünü biraz daha incelemenizi tavsiye ederim son olarak eklemek istediğim bir şey daha var post ve get methodları aynı olsaydı aynı yere konmazdı biraz web siteleri üzerindede çalışmanız gerekiyor post methodu ve get methodu arasındaki fark nedir inceleyin.
Yine beni anlamadınız, ben size o yöntemle indiremezsin demedim. Benim verdiğim kodla aynı işi yapıyor dedim. Ayrıca requests modülünü biliyorum. post ve get metodunu da biliyorum.
post ve get methodunu biliyorsanız bu şekilde cevap vermeniz hiç de mantıklı değil tekrardan post ve get methodlarını okumanızı ve python üzerinden değil web sitesinde postun ne yaptığı ve getin ne yaptığını incelemelisiniz.
şunuda son olarak ekliyelim sanki get ve postun aynı işlevi getirebildiğini düşünebilirsiniz ama gerçekten biliyorsanız arasındaki farkı bilirsiniz ve hangisinin kullanılması daha doğru olduğunu anlıyabilirsiniz
Dediğim gibi, get metodu ve post metodunu biliyorum.
Ayrıca benim bu soruyu sormam mantıklı değil ise, sizin de o kodları paylaşmanız pek mantıklı değil. requests modülünün amacı, sitelere istek göndermek. İçeriğini okumak için urllib var. İkincisi zaten ben indirmek için yöntem gösterdim. urllib modülü ile yazılmış requests modülünü kullanmak nedir?
Arkadaşlar boşverilim atışmayı sorun çözülmedi ona baksak
peki requests modülü urrlib den daha gelişmiş bir modül mü değilmi o kullanıldı diye onu yazamazmıyız o zaman pythonun bazı yerleri c ile yazılmış c ile yazılmış python modülünü kullanmakta nedir kendi yazdığınıza düşmemelisiniz
son olarakta ekliyelim içeriğini okuyamıyorsanız requests.get modülünün content özelliği neden var acaba ?
illaha içeriğini okumak istiyorsam urllib mi kullanacağım
requests.get modülü demişim orayıda düzeltelim request modülün get methodu
Atışmıyoruz aslında kusura bakma konuyu doldurduk ama burada fikir tartışması yapıyoruz güzel dir ama neden sorun çıktığına dair bir fikrim yok daha önce .exe dosyasını bile bu şekilde indirtmiştim
Bakın, requests modülünün amacı istek göndermek. Adı üstünde. Bu modülü kullanım amacının dışında kullanmak doğru değil.
Burayı dikkatli okuyun. Ben size içerik okumak için urllib modülünü kullanmak zorundasınız dedim mi?
Peki ben içeriğini okuyamazsınız dedim mi?! Onun olma sebebi, isteği gönderdikten sonra gelen cevabı okuyabilmek. Lütfen önce şu sayfayı dikkatlice okuyun, sonra bu yazdıklarımı tekrar okuyun.
Ve sizden rica ediyorum, şu yazdıklarımı dikkatli okuyun, lütfen.
kardeşim güzel kardeşim bana demedin mi urllib ile yazılmış requests modülünü kullanmanın amacı ne bende sana diyorum ki request = istek demek bunda sorun yok request ile istek gönderdikten sonra içeriğini okuyamazmıyım urllib modülü siteye istek göndermiyor mu yani istek göndermeden herhalde hayalet gibi çekiyor verileri ? sizde benim yazdıklarımı dikkatli okursanız güzel olabilir ve kendi yazdıklarınızıda son olarakda orada benim ile aynı şeyi yapmıssınız ne farkı var post get arası var ne v.s bunları bana sormak yerine kendiniz araştırabilirsiniz ayriyetten şöyle yazabilirdiniz arkadaşım benimle aynı şeyi yaptınız herhalde urllib kullanmadınız daha önce diyebilirdiniz neyse daha fazla uzatmanın alemi yok sizde şurayı okursanız güzel olabilir yukarıda linkini atmıştım
import requests def download_file(url): local_filename = "test.mp3" with requests.get(url, stream=True) as r: with open(local_filename, 'wb') as f: for chunk in r.iter_content(chunk_size=8192): f.write(chunk) return local_filename download_file("http://www.convertmp3.io/fetch/?video=https://www.youtube.com/watch?v=9UXSWpHlhFc")
Kaynak
tıkla
bizde aynısını yapmaya çalıştık ama olmadı bakalım bu olacakmı chunk kullanmamıştık
Site buna izin vermiyor anlaşılan. 403 hatası yasaklı durumlar için kullanılır.
Başka siteleri mi deneseniz?