Python3 ile Dosya İndirmek


#1

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?


#2
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. :slight_smile:


#3

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.


#4

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

#5

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.


#6

yapmak istediğiniz şey çok basit :slight_smile:


```
import requests

url = 'http://google.com/favicon.ico'
r = requests.get(url)
open('google.ico', 'wb').write(r.content)

bu kadar :slight_smile:

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 :slight_smile:


#7

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.


#8

Bu şekilde de inen dosya çalışmıyor bu yöntemi de denemiştim.


#9

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.

http://www.includekarabuk.com/kategoriler/genel/GET-ile-POST-Arasindaki-Fark.php


#10

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.


#11

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


#12

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?


#13

Arkadaşlar boşverilim atışmayı sorun çözülmedi ona baksak :smile:


#14

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 :slight_smile:


#15

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


#16

:disappointed: 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.


#17

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 :slight_smile: 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


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


#19

bizde aynısını yapmaya çalıştık ama olmadı bakalım bu olacakmı chunk kullanmamıştık :slight_smile:


#20

Site buna izin vermiyor anlaşılan. 403 hatası yasaklı durumlar için kullanılır.
Başka siteleri mi deneseniz?