Python Internet hozzáférés az Urllib.Request és az urlopen() használatával

⚡ Okos összefoglaló

Az urllib a szabványos Python modul internetes adatok eléréséhez, programok megnyitásához URLés HTML, JSON vagy bináris tartalmat kér le. Az urllib.request.urlopen() függvény egy webcímhez csatlakozik, és közvetlenül beolvassa a szerver válaszát a Python.

  • 🔘 Standard könyvtár: az urllib tartalmazza a következőt: Python és összefogja a kérés, hiba, elemzés és robotparser modulokat a következőhöz: URL feladatokat.
  • ☑️ Nyisson URL: Az urllib.request.urlopen() függvény megnyit egy kapcsolatot, és a getcode() visszaadja a HTTP állapotot, például 200-at.
  • Olvasd el a választ: A read() metódus nyers bájtokat ad vissza, amelyeket a decode(“utf-8”) olvasható szöveggé alakít.
  • 🧪 Hibák kezelése: HTTP-hiba elkapása és URLHiba az urllib.error függvényből, így a sikertelen kérések soha nem omlanak össze a programban.
  • 🇧🇷 Fájlok letöltése: Az urlretrieve() függvény elmenti a URL közvetlenül lemezre, ideális képek, PDF-ek és adathalmazok számára.
  • 🤖 AI-ra kész: Az urllib olyan adathalmazokat és API-adatokat kér le, amelyek gépi tanulási modelleket és mesterséges intelligencia folyamatokat táplálnak.

Python Internet-hozzáférés Urllib használatával

Az alábbi szakaszok elmagyarázzák, mi az urllib, hogyan lehet megnyitni egy URL és elolvashatja a HTML-kódját, valamint azt, hogyan kezelheti a hibákat, tölthet le fájlokat, és hogyan választhat az urllib és a kéréskönyvtár között.

Mi az urllib?

urllib egy Python nyitáshoz használható modul URLs. Függvényeket és osztályokat definiál, amelyek segítenek a URL intézkedéseket.

A Python, az internetről is hozzáférhet és lekérhet adatokat, például XML, HTML és JSON formátumban, majd közvetlenül ezekkel az adatokkal dolgozhat. Az alábbi szakaszokban bemutatjuk, hogyan kérhet le adatokat az internetről. Itt például egy Guru99 videó URL, a következővel érheti el: Python, és nyomtassa ki ennek a HTML fájlját URL.

Az urllib csomag több modult csoportosít: az urllib.request a megnyitáshoz URLs, urllib.error a kérések által kiváltható kivételekhez, urllib.parse az összeállításhoz és elemzéshez URLs, és az urllib.robotparser a robots.txt fájlok olvasásához.

Hogyan nyissuk meg URL Urllib használatával

Mielőtt lefuttatnánk a kódot az internetes adatokhoz való csatlakozáshoz, importálnunk kell a URL könyvtári modul, vagy „urllib”.

Nyisd ki URL Urllib használatával

  • urllib importálása
  • Határozza meg fő funkcióját
  • Deklarálja a webUrl változót
  • Ezután hívd meg az urllopen függvényt az urllib könyvtárban.
  • Az URL megnyitjuk az a Guru99 oktatóanyag a következőről: YouTube
  • Ezután kinyomtatjuk az eredménykódot.
  • Az eredménykódot a létrehozott webUrl változón alapuló getcode függvény meghívásával kérhetjük le.
  • Ezt karakterlánccá alakítjuk, hogy összefűzhető legyen az „eredménykód” karakterláncunkkal.
  • Ez egy szokásos HTTP kód, a „200” lesz, ami azt jelzi, hogy a HTTP kérés feldolgozása sikeres volt.

Hogyan lehet HTML fájlt lekérni egy URL in Python

A HTML fájlt a read() függvénnyel is beolvashatod a PythonA kód futtatásakor a HTML fájl megjelenik a konzolban.

HTML fájl innen: URL in Python

  • Hívd meg a read() függvényt a webUrl változón
  • A read() metódus lehetővé teszi az adatfájlok tartalmának beolvasását.
  • Olvasd el a teljes tartalmat URL egy adat nevű változóba
  • Futtasd a kódot, és az HTML formátumban fogja kinyomtatni az adatokat

Itt a teljes kód:

Python 2 Példa

#  
# read the data from the URL and print it
#
import urllib2

def main():
# open a connection to a URL using urllib2
   webUrl = urllib2.urlopen("https://www.youtube.com/user/guru99com")
  
#get the result code and print it
   print "result code: " + str(webUrl.getcode()) 
  
# read the data from the URL and print it
   data = webUrl.read()
   print data
 
if __name__ == "__main__":
  main()

Python 3 Példa

#
# read the data from the URL and print it
#
import urllib.request
# open a connection to a URL using urllib
webUrl  = urllib.request.urlopen('https://www.youtube.com/user/guru99com')

#get the result code and print it
print ("result code: " + str(webUrl.getcode()))

# read the data from the URL and print it
data = webUrl.read()
print (data)

Az urllib hibák kezelése: URLHiba és HTTP-hiba

Egy kérés nem mindig sikeres. Amikor valami rosszul sül el, az urllib kivételt generál az adatok visszaadása helyett, ezért fontos kezelni ezeket a hibákat. Az urllib.error modul két fő kivételosztályt definiál.

  • HTTP-hiba akkor keletkezik, amikor a szerver hibaállapot-kódot ad vissza, például 404 Nem található vagy 500 Belső szerverhiba. Magában foglalja az állapotkódot és a válasz törzsét.
  • URLhiba A hiba akkor jelentkezik, ha a szerver egyáltalán nem érhető el, például rossz domain név vagy internetkapcsolat hiánya miatt. Tartalmaz egy reason attribútumot, amely megmagyarázza a hibát.

Mivel a HTTPError a következő alosztálya: URLHiba, mindig a HTTPError hibát fogd el először, hogy minden hibatípust külön kezeljen a rendszer:

from urllib.request import urlopen
from urllib.error import HTTPError, URLError

try:
    response = urlopen("https://www.guru99.com/no-such-page.html")
    data = response.read()
except HTTPError as error:
    print("HTTP error:", error.code)
except URLError as error:
    print("URL error:", error.reason)

Ezen kivételek kezelése megakadályozza a program összeomlását, és lehetővé teszi a probléma naplózását, a kérés újrapróbálkozását, vagy a gyorsítótárazott adatokhoz való visszatérést.

Hogyan töltsünk le egy fájlt egy URL Urllib használata

Olvasás a URL A memóriába mentés kis oldalak esetén működik, de képek, PDF dokumentumok vagy adathalmazok esetén egyszerűbb a választ közvetlenül lemezre menteni. Az urllib.request modul két egyszerű módszert kínál erre.

Az urlretrieve() függvény letölt egy URL közvetlenül egy helyi fájlba egyetlen sorban:

from urllib.request import urlretrieve

urlretrieve("https://www.python.org/static/img/python-logo.png", "logo.png")

A nagyobb kontroll érdekében nyissa meg a URL és írd meg a bájtokat magad. Nyisd meg a helyi fájlt bináris módban, mert az urlopen() bájtokat ad vissza, nem szöveget:

from urllib.request import urlopen

with urlopen("https://example.com/data.zip") as response:
    with open("data.zip", "wb") as file:
        file.write(response.read())

Nagyon nagy fájlok esetén a response.read(8192) függvénnyel cikluson belül kell olvasni és írni, így a teljes fájl soha nem kerül egyszerre a memóriába.

urllib vs. a kéréskönyvtár a következőben: Python

Az urllib a következő része: Python standard könyvtár, így mindenhol telepítés nélkül működik. A harmadik féltől származó kérések könyvtára nincs beépítve, de sok fejlesztő inkább a mindennapi HTTP-munkához használja, mert a szintaxisa rövidebb és olvashatóbb.

A fő különbségek a következők:

  • Telepítés: az urllib tartalmazza a következőt: Python, míg a kéréseket a pip használatával kell telepíteni.
  • Dekódolás: Az urllib nyers bájtokat ad vissza, amelyeket te magad dekódolsz, míg a kérések automatikusan dekódolják a szöveget és a JSON-t.
  • Kényelem: A kérések kevesebb kóddal kezelik a munkameneteket, a sütiket és az egyéni fejléceket.
  • Függőségek: Az urllib semmit sem ad hozzá, míg a kérések az alatta lévő urllib3-ra támaszkodnak.

Válaszd az urllib-t, ha nulla függőséget szeretnél, vagy csak egy gyors, egyszeri kérésre van szükséged. Válassz kéréseket nagyobb projektekhez, amelyek hitelesítést, munkameneteket vagy gyakori API-hívásokat tartalmaznak. Mindkettő ugyanazokat az alapul szolgáló HTTP-kéréseket küldi, így a döntés a kényelemről vagy egy kisebb függőségi listáról szól.

GYIK

Az urlopen() függvény egy HTTP válaszobjektumot ad vissza, általában egy http.client.HTTPResponse függvényt. A nyers bájtok lekéréséhez a read() függvényt, az állapotkód beolvasásához a getcode() függvényt, a metaadatok, például a tartalom típusa és hossza pedig a headers vagy az info() függvény meghívásával vizsgálható.

az urllib2 ehhez tartozott: Python 2. -ban Python 3 átszervezték: funkcióit az urllib.request fájlba osztották fel a megnyitáshoz URLs és urllib.error kivételekhez. Code Az urllib2-höz írt részt frissíteni kell, hogy az urllib.request importálható legyen.

A read() függvény bájtokat ad vissza, nem karakterláncot, mivel az urlopen() függvény nem ismeri előre a kódolást. A decode(“utf-8”) függvény meghívása ezeket a bájtokat olvasható szöveggé alakítja, így kinyomtathatod, keresheted vagy elemezheted a HTML vagy JSON tartalmat.

Nyissa meg a URL az urlopen() függvénnyel olvasd be a bájtokat, dekódold őket, majd elemezd a json modullal: json.loads(response.read().decode(“utf-8”)). Ez egy Python szótár vagy lista, amelyet közvetlenül használhatsz, ami gyakori a webes API-k hívásakor.

Csomagolja be a URL egy urllib.request.Request objektumban, és add hozzá a fejlécet a megnyitása előtt: request.add_header(“User-Agent”, “Mozilla/5.0”), majd add át a kérést az urlopen() függvénynek. Az egyéni fejlécek segítenek, ha egy szerver blokkolja az alapértelmezett Python felhasználói ügynök.

Igen. Az urllib képes adathalmazokat, CSV-fájlokat és JSON-fájlokat lekérni webes API-kból, amelyeket aztán dekódolhatsz és betölthetsz a pandákba vagy a NumPy-ba. Ez egy könnyűsúlyú, függőségmentes módja a betanítási adatok gépi tanulási folyamatba való beolvasásának.

Igen. A GitHub Copilot automatikusan kiegészíti az olyan gyakori urllib mintákat, mint az urlopen() hívások, a Request objektumok és a try/except hibakezelés. Felgyorsítja a sablonos feladatokat, de továbbra is ellenőrizni kell a... URLs, fejlécek és a mesterséges intelligencia által javasolt kivételkezelés.

Kódold a paramétereket az urllib.parse.urlencode() függvénnyel, alakítsd át őket bájtokká az encode() függvénnyel, majd add át adatargumentumként az urlopen() függvénnyel vagy egy Request objektummal. Az adatok megadása automatikusan POST kérést küld az urllib-nek GET kérés helyett.

Foglald össze ezt a bejegyzést a következőképpen: