Saya membuat program yang akan mengunduh file .jar (java) dari server web, dengan membaca URL yang ditentukan dalam file .jad dari game / aplikasi yang sama. Saya menggunakan Python 3.2.1
Saya telah berhasil mengekstrak URL file JAR dari file JAD (setiap file JAD berisi URL ke file JAR), tetapi seperti yang Anda bayangkan, nilai yang diekstraksi adalah string type ().
Inilah fungsi yang relevan:
def downloadFile(URL=None):
import httplib2
h = httplib2.Http(".cache")
resp, content = h.request(URL, "GET")
return content
downloadFile(URL_from_file)
Namun saya selalu mendapatkan pesan kesalahan yang mengatakan bahwa jenis fungsi di atas harus byte, dan bukan string. Saya sudah mencoba menggunakan URL.encode ('utf-8'), dan juga byte (URL, encoding = 'utf-8'), tetapi saya selalu mendapatkan kesalahan yang sama atau mirip.
Jadi pada dasarnya pertanyaan saya adalah bagaimana cara mengunduh file dari server ketika URL disimpan dalam tipe string?
sumber
Jawaban:
Jika Anda ingin memperoleh konten halaman web menjadi variabel, cukup
read
respons dariurllib.request.urlopen
:Cara termudah untuk mengunduh dan menyimpan file adalah dengan menggunakan
urllib.request.urlretrieve
fungsi ini:Namun perlu diingat bahwa
urlretrieve
itu dianggap sebagai warisan dan mungkin menjadi usang (meskipun tidak yakin mengapa).Jadi cara yang paling benar untuk melakukan ini adalah dengan menggunakan
urllib.request.urlopen
fungsi untuk mengembalikan objek seperti file yang mewakili respons HTTP dan menyalinnya ke file nyata menggunakanshutil.copyfileobj
.Jika ini tampaknya terlalu rumit, Anda mungkin ingin lebih sederhana dan menyimpan seluruh unduhan dalam suatu
bytes
objek dan kemudian menulisnya ke file. Tetapi ini hanya berfungsi dengan baik untuk file kecil.Dimungkinkan untuk mengekstraksi
.gz
(dan mungkin format lain) dengan mengompresi data dengan cepat, tetapi operasi seperti itu mungkin memerlukan server HTTP untuk mendukung akses acak ke file tersebut.sumber
response.info().get_param('charset', 'utf-8')
alih-alih hardcodingutf-8
, untuk mendapatkan pengkodean karakter dariContent-Type
headeroutfile.write(data)
hanya berfungsi dengan baik untuk file kecil?Saya menggunakan
requests
paket kapan pun saya menginginkan sesuatu yang terkait dengan permintaan HTTP karena API-nya sangat mudah untuk memulai dengan:pertama, instal
requests
lalu kodenya:
sumber
Saya harap saya mengerti pertanyaan yang benar, yaitu: bagaimana cara mengunduh file dari server ketika URL disimpan dalam tipe string?
Saya mengunduh file dan menyimpannya secara lokal menggunakan kode di bawah ini:
sumber
Di sini kita dapat menggunakan antarmuka Legacy urllib di Python3:
Fungsi dan kelas berikut ini porting dari modul Python 2 urllib (sebagai lawan dari urllib2). Mereka mungkin menjadi usang di beberapa titik di masa depan.
Contoh (2 kode baris) :
sumber
Anda dapat menggunakan wget yang populer untuk mengunduh alat shell untuk itu. https://pypi.python.org/pypi/wget Ini akan menjadi metode paling sederhana karena tidak perlu membuka file tujuan. Berikut ini sebuah contoh.
sumber
Ya, permintaan definietly adalah paket bagus untuk digunakan dalam sesuatu yang terkait dengan permintaan HTTP. tetapi kita perlu berhati-hati dengan jenis penyandian data yang masuk juga di bawah ini adalah contoh yang menjelaskan perbedaannya
sumber
Motivasi
Terkadang, kami ingin mendapatkan gambar tetapi tidak perlu mengunduhnya ke file nyata,
yaitu mengunduh data dan menyimpannya di memori.
Misalnya, Jika saya menggunakan metode pembelajaran mesin, latih model yang dapat mengenali gambar dengan angka (kode batang).
Ketika saya laba-laba beberapa situs web dan yang memiliki gambar-gambar itu sehingga saya dapat menggunakan model untuk mengenalinya,
dan saya tidak ingin menyimpan gambar-gambar itu di drive disk saya,
maka Anda dapat mencoba metode di bawah ini untuk membantu Anda menyimpan data unduhan di memori.
Poin
pada dasarnya, seperti @Ranvijay Kumar
Sebuah contoh
sumber
sumber