Python urllib’i

Python işlevleri ve meth

urllib modülü, Python 3'te request işlevine erişim şeklini değiştirdi. Bunun anlamı, “urlopen” Python 2'de yaptığınız gibi çalışırsanız “AttributeError: ‘module’ nesnenin ‘urlopen’” özniteliği yok; error.

Bu kılavuz, bu hatanın ne anlama geldiği ve neden ortaya çıktığı hakkında konuşuyor. Nasıl çözeceğinizi öğrenebilmeniz için bu hatanın bir örneğini inceliyor.




AttributeError: ‘module’ nesnenin ‘urlopen’

özniteliği yok

“urllib” module, URL'lerin açılması ve web sitelerinden veri okunmasıyla ilgili bir dizi işlev sağlar. Bu kitaplığı kullanma sözdizimi Python 2 ve Python 3 arasında farklıdır.

Python 2'de , “urlopen” “urllib” modül. Bu, urllib.urlopen kullanarak kodunuza aktarabileceğiniz anlamına gelir. Python 3'te, “urlopen” bir “isteğin” “urllib” yöntem:

  • Python 2: urllib -> urlopen
  • Python 3: urllib -> istek -> urlopen

“istek” modülü, birçok web isteğinin “urllib” paket paketlenir. Bu özniteliği içermeyen bir modülden bir özniteliğe erişmeye çalıştığınızda AttributeErrors ortaya çıkar. Bu durumda, “urlopen” “urllib” modülü.




Örnek Senaryo

JSONPlaceholder adlı bir hizmetten veri alan bir program oluşturun. Bu hizmet, örneğiniz için kullanabileceğiniz yapay veriler sağlar. 

2 numaralı kimlikle tek bir gönderi alın. Başlamak için urllib modülünü içe aktarın:

urllib'i içe aktar

Bu ifade, işlevleri “urllib” 

Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. Bugün bir eğitim kampı ile eşleştirin.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan az zaman harcadı.

Sonra, şunu kullanarak bir istekte bulunun. "urlopen". Bu, JSONPlaceholder API'sindeki bir uç noktadan verileri almanızı sağlar:

data = urllib. urlopen("https://jsonplaceholder.typicode.com/posts/2") content = data.read() print(as_json)

Bu kod, kimliğe sahip gönderi için verileri okur JSONPlaceholder API'sinde 2 numara. 

Kod, isteğimizden gelen yanıtı bir JSON dizesi olarak biçimlendirilmiş olarak bir print deyimi kullanarak konsola yazdırır. Kodu çalıştırın ve ne olduğunu görün:

Geri izleme (en son çağrı): Dosya "ana .py", satır 4,  data = urllib.urlopen("https://jsonplaceholder.typicode.com/posts/2") AttributeError: "urllib" modülünde "urlopen" özniteliği yok

Program bir hata döndürüyor .




Çözüm

Size erişmek için Python 2 sözdizimini kullanıyorsunuz. “urlopen” yöntem. “urlopen” “urllib” Python'da 3. “urlopen” “urllib” bu nedenle program düzgün çalışmaz.

Bu sorunu çözmek için “isteği” “urllib” modül. Bu modül, “urlopen” method:

urllib.request'i içe aktar

Sonraki, JSONPlaceholder API'sinden veri alırken urllib.request modülüne başvuracak şekilde kodu değiştirin:

Bu kod, çağırdığımız API uç noktasının içeriğini okuyacaktır. Kodumuzu çalıştıralım:

{ "userId": 1, "id": 2 , "başlık": "en kısa öz", "vücut": "geçmişteki özgeçmişin geri kalanını hiçbir şey kabul etmiyor ve hiçbir şekilde borçsuz" /pre> 

Aldığınız yanıtın kodunu decode() yöntemini kullanarak çözdünüz. Bunu, urlopen() yöntemi tarafından döndürülen değerleri bir dize olarak okuyabilmek için yapın.




Sonuç

“urlopen” işlev bir “urllib” nesnesi değildir; Python 3. Bu işleve erişmek için “urllib.request” kodunuza girin ve urllib.request.urlopen() işlevine başvurun.


Artık bu Python hatasını bir profesyonel gibi düzeltmek için ihtiyacınız olan bilgiye sahipsiniz!





Python urllib'i: StackOverflow Questions

Tutorials