Python Pristup internetu pomoću Urllib.Request i urlopen()

⚡ Pametni sažetak

urllib je standard Python modul za pristup internetskim podacima, omogućavanje otvaranja programa URLi dohvaćanje HTML, JSON ili binarnog sadržaja. Funkcija urllib.request.urlopen() povezuje se s web adresom i izravno čita odgovor poslužitelja u Python.

  • 🔘 Standardna biblioteka: urllib se isporučuje s Python i objedinjuje module zahtjeva, pogreške, parsiranja i robotparsera za URL zadataka.
  • ☑️ Otvoreno URL: Funkcija urllib.request.urlopen() otvara vezu, a getcode() vraća HTTP status kao što je 200.
  • Pročitajte odgovor: Metoda read() vraća sirove bajtove, koje decode("utf-8") pretvara u čitljiv tekst.
  • 🧪 Obrada grešaka: Uhvati HTTPError i URLGreška iz urllib.error pa neuspjeli zahtjevi nikada ne ruše program.
  • 🛠️ Preuzmite datoteke: Funkcija urlretrieve() sprema sve URL izravno na disk, idealno za slike, PDF-ove i skupove podataka.
  • 🤖 Spremno za umjetnu inteligenciju: urllib dohvaća skupove podataka i API podatke koji hrane modele strojnog učenja i AI cjevovode.

Python Pristup internetu putem Urllib-a

U donjim odjeljcima objašnjeno je što je urllib, kako otvoriti URL i pročitajte njegov HTML, te kako se nositi s greškama, preuzeti datoteke i odabrati između urllib i biblioteke zahtjeva.

Što je urllib?

urllib je a Python modul koji se može koristiti za otvaranje URLs. Definira funkcije i klase koje pomažu u URL radnje.

Kontakt Python, također možete pristupiti i dohvaćati podatke s interneta, kao što su XML, HTML i JSON, a zatim izravno raditi s tim podacima. U odjeljcima u nastavku vidjet ćemo kako dohvaćati podatke s weba. Na primjer, ovdje koristimo Guru99 Video URL, pristupite mu pomoću Pythoni ispišite HTML datoteku ovoga URL.

Paket urllib grupira nekoliko modula: urllib.request za otvaranje URLs, urllib.error za iznimke koje zahtjevi mogu izazvati, urllib.parse za izgradnju i parsiranje URLs i urllib.robotparser za čitanje robots.txt datoteka.

Kako otvoriti URL korištenje Urllib-a

Prije nego što pokrenemo kod za povezivanje s internetskim podacima, moramo uvesti URL modul knjižnice ili „urllib“.

Otvoren URL korištenje Urllib-a

  • Uvezi urllib
  • Definirajte svoju glavnu funkciju
  • Deklarirajte varijablu webUrl
  • Zatim pozovite funkciju urlopen u biblioteci urllib
  • The URL otvaramo je Guru99 tutorijala o YouTube
  • Zatim ispisujemo rezultantni kod
  • Rezultatni kod se dohvaća pozivom funkcije getcode na varijabli webUrl koju smo kreirali
  • To pretvaramo u niz znakova kako bi se mogao spojiti s našim nizom znakova "kod rezultata".
  • Ovo će biti regularni HTTP kod „200“, što ukazuje da je HTTP zahtjev uspješno obrađen

Kako dobiti HTML datoteku iz URL in Python

HTML datoteku možete pročitati i pomoću funkcije read() u PythonKada pokrenete kod, HTML datoteka će se pojaviti u konzoli.

HTML datoteka iz URL in Python

  • Pozovite funkciju read() na varijabli webUrl
  • Metoda read() omogućuje čitanje sadržaja podatkovnih datoteka
  • Pročitajte cijeli sadržaj URL u varijablu pod nazivom podaci
  • Pokrenite kod i on će ispisati podatke u HTML formatu

Evo kompletnog koda:

Python 2 Primjer

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

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

Kako riješiti probleme s urllib greškama: URLPogreška i HTTP pogreška

Zahtjev ne uspijeva uvijek. Kada nešto pođe po zlu, urllib podiže iznimku umjesto vraćanja podataka, stoga je važno obraditi te pogreške. Modul urllib.error definira dvije glavne klase iznimaka.

  • HTTP pogreška se pokreće kada poslužitelj vrati statusni kod pogreške, kao što je 404 Nije pronađeno ili 500 Internalna pogreška poslužitelja. Sadrži statusni kod i tijelo odgovora.
  • URLgreška se aktivira kada poslužitelj uopće nije dostupan, na primjer zbog pogrešnog naziva domene ili nedostatka internetske veze. Sadrži atribut razloga koji objašnjava neuspjeh.

Budući da je HTTPError podklasa od URLGreška, uvijek prvo uhvati HTTPError kako bi se svaka vrsta greške obradila zasebno:

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)

Obrada ovih iznimki sprječava rušenje programa i omogućuje vam evidentiranje problema, ponovni pokušaj zahtjeva ili povratak na predmemorirane podatke.

Kako preuzeti datoteku s URL Korištenje urllib-a

Čitanje a URL Spremanje u memoriju funkcionira za male stranice, ali za slike, PDF dokumente ili skupove podataka lakše je spremiti odgovor izravno na disk. Modul urllib.request nudi dva jednostavna načina za to.

Funkcija urlretrieve() preuzima URL izravno u lokalnu datoteku u jednom retku:

from urllib.request import urlretrieve

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

Za veću kontrolu otvorite URL i sami zapišite bajtove. Otvorite lokalnu datoteku u binarnom načinu rada jer urlopen() vraća bajtove, a ne tekst:

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())

Za vrlo velike datoteke, čitajte i pišite u petlji koristeći response.read(8192) tako da se cijela datoteka nikada ne pohranjuje u memoriji odjednom.

urllib u odnosu na biblioteku zahtjeva u Python

urllib je dio Python standardna biblioteka, tako da radi svugdje bez instalacije. Biblioteka zahtjeva trećih strana nije ugrađena, ali mnogi programeri je preferiraju za svakodnevni HTTP rad jer je njezina sintaksa kraća i čitljivija.

Glavne razlike su:

  • Instalacija: urllib se isporučuje s Python, dok zahtjevi moraju biti instalirani pomoću pipa.
  • Dekodiranje: urllib vraća sirove bajtove koje sami dekodirate, dok requests automatski dekodira tekst i JSON.
  • Praktičnost: zahtjevi obrađuju sesije, kolačiće i prilagođene zaglavlja s manje koda.
  • ovisnosti: urllib ne dodaje ništa, dok se zahtjevi oslanjaju na urllib3 ispod.

Odaberite urllib kada ne želite nikakve ovisnosti ili vam je potreban samo brz, jednokratni zahtjev. Odaberite zahtjeve za veće projekte koji uključuju autentifikaciju, sesije ili česte API pozive. Oba šalju iste temeljne HTTP zahtjeve, pa se odluka svodi na praktičnost u odnosu na manji popis ovisnosti.

Pitanja i odgovori

urlopen() vraća HTTP objekt odgovora, obično http.client.HTTPResponse. Pozivate read() za dobivanje sirovih bajtova, getcode() za čitanje statusnog koda i zaglavlja ili info() za pregled metapodataka kao što su vrsta sadržaja i duljina.

urllib2 je pripadao Python 2. u Python 3 reorganiziran je: njegove značajke su podijeljene u urllib.request za otvaranje URLs i urllib.error za iznimke. Code napisan za urllib2 mora se ažurirati za uvoz urllib.request.

read() vraća bajtove, a ne niz znakova, jer urlopen() ne zna kodiranje unaprijed. Pozivanje decode("utf-8") pretvara te bajtove u čitljiv tekst tako da možete ispisati, pretraživati ​​ili parsirati HTML ili JSON sadržaj.

Otvorite URL Pomoću urlopen(), pročitajte bajtove, dekodirajte ih, a zatim parsirajte pomoću json modula: json.loads(response.read().decode(“utf-8”)). Ovo vraća Python rječnik ili popis koji možete koristiti izravno, što je uobičajeno pri pozivanju web API-ja.

Zamotajte URL u objektu urllib.request.Request i dodajte zaglavlje prije otvaranja: request.add_header(“Korisnički agent”, “Mozilla/5.0”), a zatim proslijedite zahtjev urlopen(). Prilagođena zaglavlja pomažu kada poslužitelj blokira zadano Python korisnički agent.

Da. urllib može dohvatiti skupove podataka, CSV datoteke i JSON iz web API-ja, koje zatim dekodirate i učitavate u pande ili NumPy. To je lagan, bez ovisnosti način za povlačenje podataka za obuku u cjevovod strojnog učenja.

Da. GitHub Copilot automatski dovršava uobičajene urllib obrasce kao što su urlopen() pozivi, objekti zahtjeva i rukovanje greškama try/except. Ubrzava standardni kod, ali ipak biste trebali provjeriti URLs, zaglavlja i obrada iznimki koje predlaže AI asistent.

Kodirajte svoje parametre pomoću urllib.parse.urlencode(), pretvorite ih u bajtove pomoću encode(), a zatim ih proslijedite kao argument podataka urlopen() ili objektu Request. Dostavljanje podataka automatski uzrokuje da urllib šalje POST umjesto GET zahtjeva.

Sažmite ovu objavu uz: