Python Internetåtkomst med Urllib.Request och urlopen()

⚡ Smart sammanfattning

urllib är standarden Python modul för åtkomst till internetdata, vilket gör att program kan öppnas URLs och hämta HTML-, JSON- eller binärinnehåll. Funktionen urllib.request.urlopen() ansluter till en webbadress och läser serversvaret direkt in i Python.

  • 🔘 Standardbibliotek: urllib levereras med Python och buntar modulerna för request, error, parse och robotparser för URL uppgifter.
  • ☑️ Öppna en URL: Funktionen urllib.request.urlopen() öppnar en anslutning och getcode() returnerar HTTP-statusen, till exempel 200.
  • Läs svaret: Metoden read() returnerar råa byte, vilka decode("utf-8") konverterar till läsbar text.
  • 🧪 Hantera fel: Fånga HTTP-fel och URLFel från urllib.error så att misslyckade förfrågningar aldrig kraschar programmet.
  • 🛠️ Hämta filer: Funktionen urlretrieve() sparar alla URL direkt till disk, perfekt för bilder, PDF-filer och datamängder.
  • 🤖 AI-redo: urllib hämtar datamängder och API-data som matar maskininlärningsmodeller och AI-pipelines.

Python Internetåtkomst med Urllib

Avsnitten nedan förklarar vad urllib är, hur man öppnar en URL och läsa dess HTML, och hur man hanterar fel, laddar ner filer och väljer mellan urllib och förfrågningsbiblioteket.

Vad är urllib?

urllib är en Python modul som kan användas för att öppna URLs. Den definierar funktioner och klasser för att hjälpa till med URL åtgärder.

Med Python, kan du också komma åt och hämta data från internet, såsom XML, HTML och JSON, och sedan arbeta direkt med dessa data. I avsnitten nedan kommer vi att se hur man hämtar data från webben. Till exempel, här använder vi en Guru99 video URL, få åtkomst till den med hjälp av Pythonoch skriv ut HTML-filen för detta URL.

Paketet urllib grupperar flera moduler: urllib.request för öppning URLs, urllib.error för de undantag som förfrågningar kan generera, urllib.parse för att bygga och parsa URLs och urllib.robotparser för att läsa robots.txt-filer.

Hur man öppnar URL använder Urllib

Innan vi kör koden för att ansluta till internetdata måste vi importera URL biblioteksmodulen eller ”urllib”.

Öppet URL använder Urllib

  • Importera urllib
  • Definiera din huvudfunktion
  • Deklarera variabeln webUrl
  • Anropa sedan urlopen-funktionen i urllib-biblioteket
  • Ocuco-landskapet URL vi öppnar är Guru99 handledning om YouTube
  • Därefter skriver vi ut resultatkoden
  • Resultatkoden hämtas genom att anropa funktionen getcode på webUrl-variabeln som vi har skapat.
  • Vi konverterar det till en sträng, så att den kan sammanfogas med vår sträng "resultatkod"
  • Detta kommer att vara en vanlig HTTP-kod "200", vilket indikerar att HTTP-begäran har bearbetats korrekt

Hur man hämtar en HTML-fil från en URL in Python

Du kan också läsa HTML-filen genom att använda funktionen read() i PythonNär du kör koden visas HTML-filen i konsolen.

HTML-fil från URL in Python

  • Anropa read()-funktionen på webUrl-variabeln
  • Metoden read() låter dig läsa innehållet i datafiler
  • Läs hela innehållet i URL till en variabel som heter data
  • Kör koden så skriver den ut informationen i HTML-format

Här är hela koden:

Python 2 Exempel

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

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

Så här hanterar du urllib-fel: URLFel och HTTP-fel

En begäran lyckas inte alltid. När något går fel genererar urllib ett undantag istället för att returnera data, så det är viktigt att hantera dessa fel. Modulen urllib.error definierar två huvudsakliga undantagsklasser.

  • HTTP-fel utlöses när servern returnerar en felstatuskod, till exempel 404 Not Found (Inte hittad) eller 500 Internal Server Error (Internal Server Error). Den innehåller statuskoden och svarstexten.
  • URLFel aktiveras när servern inte kan nås alls, till exempel på grund av fel domännamn eller ingen internetanslutning. Den har ett reason-attribut som förklarar felet.

Eftersom HTTPError är en underklass av URLFel, fånga alltid HTTPError först så att varje feltyp hanteras separat:

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)

Att hantera dessa undantag förhindrar att programmet kraschar och låter dig logga problemet, försöka utföra begäran igen eller återgå till cachade data.

Hur man laddar ner en fil från en URL Använda urllib

Läser en URL into memory fungerar för små sidor, men för bilder, PDF-dokument eller dataset är det enklare att spara svaret direkt till disk. Modulen urllib.request erbjuder två enkla sätt att göra detta.

Funktionen urlretrieve() laddar ner en URL direkt till en lokal fil på en enda rad:

from urllib.request import urlretrieve

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

För mer kontroll, öppna URL och skriv bytena själv. Öppna den lokala filen i binärt läge eftersom urlopen() returnerar byte, inte text:

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

För mycket stora filer, läs och skriv i en loop med hjälp av response.read(8192) så att hela filen aldrig lagras i minnet samtidigt.

urllib kontra förfrågningsbiblioteket i Python

urllib är en del av Python standardbibliotek, så det fungerar överallt utan installation. Tredjepartsbiblioteket för förfrågningar är inte inbyggt, men många utvecklare föredrar det för vardagligt HTTP-arbete eftersom dess syntax är kortare och mer lättläst.

De viktigaste skillnaderna är:

  • Installation: urllib levereras med Python, medan förfrågningar måste installeras med pip.
  • Avkodning: urllib returnerar råa byte som du avkodar själv, medan requests avkodar text och JSON automatiskt.
  • Bekvämlighet: förfrågningar hanterar sessioner, cookies och anpassade rubriker med mindre kod.
  • beroenden: urllib lägger inte till någon, medan förfrågningar förlitar sig på urllib3 nedanför.

Välj urllib när du inte vill ha några beroenden eller bara behöver en snabb, engångsförfrågan. Välj förfrågningar för större projekt som involverar autentisering, sessioner eller frekventa API-anrop. Båda skickar samma underliggande HTTP-förfrågningar, så beslutet handlar om bekvämlighet kontra en mindre beroendelista.

Vanliga frågor

urlopen() returnerar ett HTTP-svarsobjekt, vanligtvis ett http.client.HTTPResponse. Du anropar read() för att hämta råa byte, getcode() för att läsa statuskoden och headers eller info() för att inspektera metadata som innehållstyp och längd.

urllib2 tillhörde Python 2. i Python 3 den omorganiserades: dess funktioner delades upp i urllib.request för öppning URLs och urllib.error för undantag. Code skriven för urllib2 måste uppdateras för att importera urllib.request istället.

read() returnerar byte, inte en sträng, eftersom urlopen() inte känner till kodningen i förväg. Anrop av decode("utf-8") konverterar dessa byte till läsbar text så att du kan skriva ut, söka i eller analysera HTML- eller JSON-innehållet.

Öppna URL med urlopen(), läs bytena, avkoda dem och analysera dem sedan med json-modulen: json.loads(response.read().decode("utf-8")). Detta returnerar en Python ordbok eller lista som du kan använda direkt, vilket är vanligt när man anropar webb-API:er.

Packa in URL i ett urllib.request.Request-objekt och lägg till headern innan du öppnar det: request.add_header("User-Agent", "Mozilla/5.0"), skicka sedan begäran till urlopen(). Anpassade headers hjälper när en server blockerar standardinställningen. Python användaragent.

Ja. urllib kan hämta dataset, CSV-filer och JSON från webb-API:er, som du sedan avkodar och laddar in i Pandas eller NumPy. Det är ett lätt och beroendefritt sätt att hämta träningsdata till en maskininlärningspipeline.

Ja. GitHub Copilot kompletterar automatiskt vanliga urllib-mönster som urlopen()-anrop, Request-objekt och try/except-felhantering. Det snabbar upp standardinställningarna, men du bör fortfarande verifiera URLs, rubriker och undantagshantering som AI-assistenten föreslår.

Koda dina parametrar med urllib.parse.urlencode(), konvertera dem till byte med encode() och skicka dem sedan som dataargument till urlopen() eller ett Request-objekt. Att ange data gör automatiskt att urllib skickar en POST istället för en GET-förfrågan.

Sammanfatta detta inlägg med: