Python Πρόσβαση στο Διαδίκτυο χρησιμοποιώντας Urllib.Request και urlopen()

⚡ Έξυπνη Σύνοψη

Το urllib είναι το πρότυπο Python ενότητα για πρόσβαση σε δεδομένα διαδικτύου, επιτρέποντας στο πρόγραμμα να ανοίγει URLs και να ανακτήσετε περιεχόμενο HTML, JSON ή δυαδικό. Η συνάρτηση urllib.request.urlopen() συνδέεται με μια διεύθυνση ιστού και διαβάζει την απόκριση του διακομιστή απευθείας σε Python.

  • 🔘 Τυπική βιβλιοθήκη: Το urllib αποστέλλεται με Python και ομαδοποιεί τις ενότητες request, error, parse και robotparser για URL καθήκοντα.
  • ☑️ Ανοίξτε ένα URL: Η συνάρτηση urllib.request.urlopen() ανοίγει μια σύνδεση και η συνάρτηση getcode() επιστρέφει την κατάσταση HTTP, όπως 200.
  • Διαβάστε την απάντηση: Η μέθοδος read() επιστρέφει ακατέργαστα bytes, τα οποία η decode("utf-8") μετατρέπει σε αναγνώσιμο κείμενο.
  • 🧪 Σφάλματα χειρισμού: Εντοπίστε το HTTPError και URLΣφάλμα από το urllib.error, επομένως τα αποτυχημένα αιτήματα δεν προκαλούν ποτέ σφάλματα στο πρόγραμμα.
  • Λήψη αρχείων: Η συνάρτηση urlretrieve() αποθηκεύει οποιαδήποτε URL απευθείας στον δίσκο, ιδανικό για εικόνες, PDF και σύνολα δεδομένων.
  • 🤖 Έτοιμο για Τεχνητή Νοημοσύνη: Το urllib ανακτά σύνολα δεδομένων και δεδομένα API που τροφοδοτούν μοντέλα μηχανικής μάθησης και αγωγούς τεχνητής νοημοσύνης.

Python Πρόσβαση στο Διαδίκτυο μέσω Urllib

Οι παρακάτω ενότητες εξηγούν τι είναι το urllib, πώς να ανοίξετε ένα URL και να διαβάσετε τον κώδικα HTML του, και πώς να χειριστείτε σφάλματα, να κατεβάσετε αρχεία και να επιλέξετε μεταξύ του urllib και της βιβλιοθήκης αιτημάτων.

Τι είναι το urllib;

urllib είναι α Python ενότητα που μπορεί να χρησιμοποιηθεί για άνοιγμα URLσ. Ορίζει συναρτήσεις και κλάσεις για να βοηθήσει στην URL Ενέργειες.

Με Python, μπορείτε επίσης να αποκτήσετε πρόσβαση και να ανακτήσετε δεδομένα από το διαδίκτυο, όπως XML, HTML και JSON, και στη συνέχεια να εργαστείτε απευθείας με αυτά τα δεδομένα. Στις παρακάτω ενότητες, θα δούμε πώς να ανακτήσετε δεδομένα από τον ιστό. Για παράδειγμα, εδώ χρησιμοποιούμε ένα Guru99 βίντεο URL, αποκτήστε πρόσβαση σε αυτό χρησιμοποιώντας Pythonκαι εκτυπώστε το αρχείο HTML αυτού URL.

Το πακέτο urllib ομαδοποιεί αρκετές ενότητες: urllib.request για άνοιγμα URLs, urllib.error για τις εξαιρέσεις που μπορούν να δημιουργήσουν τα αιτήματα, urllib.parse για τη δημιουργία και την ανάλυση URLs και urllib.robotparser για την ανάγνωση αρχείων robots.txt.

Πώς να ανοίξετε URL χρησιμοποιώντας το Urllib

Πριν εκτελέσουμε τον κώδικα για σύνδεση σε δεδομένα διαδικτύου, πρέπει να εισαγάγουμε το URL ενότητα βιβλιοθήκης ή «urllib».

Ανοικτό URL χρησιμοποιώντας το Urllib

  • Εισαγωγή urllib
  • Καθορίστε την κύρια λειτουργία σας
  • Δηλώστε τη μεταβλητή webUrl
  • Στη συνέχεια, καλέστε τη συνάρτηση urlopen στη βιβλιοθήκη urllib
  • The URL ανοίγουμε είναι το Guru99 σεμινάρια για YouTube
  • Στη συνέχεια, εκτυπώνουμε τον κώδικα αποτελέσματος
  • Ο κωδικός αποτελέσματος ανακτάται καλώντας τη συνάρτηση getcode στη μεταβλητή webUrl που έχουμε δημιουργήσει.
  • Το μετατρέπουμε σε συμβολοσειρά, έτσι ώστε να μπορεί να συνενωθεί με τη συμβολοσειρά μας "κώδικας αποτελέσματος"
  • Αυτός θα είναι ένας κανονικός κωδικός HTTP "200", που υποδεικνύει ότι το αίτημα HTTP υποβλήθηκε σε επεξεργασία με επιτυχία.

Πώς να λάβετε ένα αρχείο HTML από ένα URL in Python

Μπορείτε επίσης να διαβάσετε το αρχείο HTML χρησιμοποιώντας τη συνάρτηση read() στο PythonΌταν εκτελείτε τον κώδικα, το αρχείο HTML θα εμφανιστεί στην κονσόλα.

Αρχείο HTML από URL in Python

  • Καλέστε τη συνάρτηση read() στη μεταβλητή webUrl
  • Η μέθοδος read() σας επιτρέπει να διαβάσετε τα περιεχόμενα των αρχείων δεδομένων
  • Διαβάστε ολόκληρο το περιεχόμενο του URL σε μια μεταβλητή που ονομάζεται δεδομένα
  • Εκτελέστε τον κώδικα και θα εκτυπώσει τα δεδομένα σε μορφή HTML

Εδώ είναι ο πλήρης κώδικας:

Python 2 Παράδειγμα

#  
# 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 Παράδειγμα

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

Πώς να χειριστείτε σφάλματα urllib: URLΣφάλμα και HTTPError

Ένα αίτημα δεν είναι πάντα επιτυχές. Όταν κάτι πάει στραβά, το urllib δημιουργεί μια εξαίρεση αντί να επιστρέφει δεδομένα, επομένως είναι σημαντικό να χειριστείτε αυτά τα σφάλματα. Η ενότητα urllib.error ορίζει δύο κύριες κλάσεις εξαιρέσεων.

  • Σφάλμα HTTP ενεργοποιείται όταν ο διακομιστής επιστρέφει έναν κωδικό κατάστασης σφάλματος, όπως 404 Δεν βρέθηκε ή 500 Εσωτερικό σφάλμα διακομιστή. Μεταφέρει τον κωδικό κατάστασης και το σώμα της απόκρισης.
  • URLΛάθος Εμφανίζεται όταν δεν είναι δυνατή η πρόσβαση στον διακομιστή, για παράδειγμα λόγω λανθασμένου ονόματος τομέα ή έλλειψης σύνδεσης στο διαδίκτυο. Φέρει ένα χαρακτηριστικό reason που εξηγεί την αποτυχία.

Επειδή το HTTPError είναι μια υποκλάση του URLΣφάλμα, να εντοπίζετε πάντα πρώτα το HTTPError, ώστε κάθε τύπος σφάλματος να αντιμετωπίζεται ξεχωριστά:

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)

Η διαχείριση αυτών των εξαιρέσεων αποτρέπει την κατάρρευση του προγράμματός σας και σας επιτρέπει να καταγράφετε το πρόβλημα, να επαναλαμβάνετε το αίτημα ή να επιστρέφετε σε δεδομένα που είναι αποθηκευμένα στην προσωρινή μνήμη.

Πώς να κατεβάσετε ένα αρχείο από ένα URL Χρησιμοποιώντας το urllib

Ανάγνωση α URL Η αποθήκευση στη μνήμη λειτουργεί για μικρές σελίδες, αλλά για εικόνες, έγγραφα PDF ή σύνολα δεδομένων είναι ευκολότερο να αποθηκεύσετε την απόκριση απευθείας στον δίσκο. Η ενότητα urllib.request προσφέρει δύο απλούς τρόπους για να το κάνετε αυτό.

Η συνάρτηση urlretrieve() κατεβάζει ένα URL απευθείας σε ένα τοπικό αρχείο σε μία μόνο γραμμή:

from urllib.request import urlretrieve

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

Για περισσότερο έλεγχο, ανοίξτε το URL και γράψτε τα byte μόνοι σας. Ανοίξτε το τοπικό αρχείο σε δυαδική λειτουργία επειδή η urlopen() επιστρέφει byte, όχι κείμενο:

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

Για πολύ μεγάλα αρχεία, διαβάστε και γράψτε σε έναν βρόχο χρησιμοποιώντας την εντολή response.read(8192), ώστε ολόκληρο το αρχείο να μην διατηρείται ποτέ στη μνήμη ταυτόχρονα.

urllib έναντι της βιβλιοθήκης αιτημάτων στο Python

Το urllib είναι μέρος του Python τυπική βιβλιοθήκη, επομένως λειτουργεί παντού χωρίς εγκατάσταση. Η βιβλιοθήκη αιτημάτων τρίτων δεν είναι ενσωματωμένη, αλλά πολλοί προγραμματιστές την προτιμούν για καθημερινή εργασία HTTP επειδή η σύνταξή της είναι μικρότερη και πιο ευανάγνωστη.

Οι κύριες διαφορές είναι:

  • Εγκατάσταση: Το urllib αποστέλλεται με Python, ενώ τα αιτήματα πρέπει να εγκατασταθούν με pip.
  • Αποκρυπτογράφηση: Το urllib επιστρέφει ακατέργαστα bytes που αποκωδικοποιείτε εσείς οι ίδιοι, ενώ τα αιτήματα αποκωδικοποιούν αυτόματα κείμενο και JSON.
  • Ευκολία: Τα αιτήματα χειρίζονται περιόδους σύνδεσης, cookies και προσαρμοσμένες κεφαλίδες με λιγότερο κώδικα.
  • Εξαρτήσεις: Το urllib δεν προσθέτει καμία, ενώ τα αιτήματα βασίζονται στο urllib3 από κάτω.

Επιλέξτε urllib όταν δεν θέλετε εξαρτήσεις ή χρειάζεστε μόνο ένα γρήγορο, μεμονωμένο αίτημα. Επιλέξτε αιτήματα για μεγαλύτερα έργα που περιλαμβάνουν έλεγχο ταυτότητας, συνεδρίες ή συχνές κλήσεις API. Και τα δύο στέλνουν τα ίδια υποκείμενα αιτήματα HTTP, επομένως η απόφαση εξαρτάται από την ευκολία σε σχέση με μια μικρότερη λίστα εξαρτήσεων.

Συχνές Ερωτήσεις

Η urlopen() επιστρέφει ένα αντικείμενο απόκρισης HTTP, συνήθως ένα http.client.HTTPResponse. Καλείτε την read() για να λάβετε τα ακατέργαστα bytes, την getcode() για να διαβάσετε τον κωδικό κατάστασης και τις κεφαλίδες ή την info() για να ελέγξετε μεταδεδομένα όπως τον τύπο και το μήκος περιεχομένου.

Το urllib2 ανήκε σε Python 2. σε Python 3 αναδιοργανώθηκε: τα χαρακτηριστικά του χωρίστηκαν σε urllib.request για άνοιγμα URLs και urllib.error για εξαιρέσεις. Code Το αρχείο που έχει γραφτεί για το urllib2 πρέπει να ενημερωθεί για να εισάγει το urllib.request.

Η read() επιστρέφει bytes, όχι συμβολοσειρά, επειδή η urlopen() δεν γνωρίζει την κωδικοποίηση εκ των προτέρων. Η κλήση της decode(“utf-8”) μετατρέπει αυτά τα bytes σε αναγνώσιμο κείμενο, ώστε να μπορείτε να εκτυπώσετε, να αναζητήσετε ή να αναλύσετε το περιεχόμενο HTML ή JSON.

Ανοίξτε το URL με urlopen(), διαβάζει τα bytes, τα αποκωδικοποιεί και στη συνέχεια τα αναλύει με την ενότητα json: json.loads(response.read().decode(“utf-8”)). Αυτό επιστρέφει ένα Python λεξικό ή λίστα που μπορείτε να χρησιμοποιήσετε απευθείας, κάτι που είναι συνηθισμένο κατά την κλήση API ιστού.

Τυλίξτε το URL σε ένα αντικείμενο urllib.request.Request και προσθέστε την κεφαλίδα πριν το ανοίξετε: request.add_header(“User-Agent”, “Mozilla/5.0”) και, στη συνέχεια, διαβιβάστε το αίτημα στο urlopen(). Οι προσαρμοσμένες κεφαλίδες βοηθούν όταν ένας διακομιστής μπλοκάρει την προεπιλεγμένη Python πράκτορας χρήστη.

Ναι. Το urllib μπορεί να ανακτήσει σύνολα δεδομένων, αρχεία CSV και JSON από web API, τα οποία στη συνέχεια αποκωδικοποιείτε και φορτώνετε σε pandas ή NumPy. Είναι ένας ελαφρύς, χωρίς εξαρτήσεις τρόπος για να αντλήσετε δεδομένα εκπαίδευσης σε έναν αγωγό μηχανικής μάθησης.

Ναι. Το GitHub Copilot συμπληρώνει αυτόματα κοινά μοτίβα urllib, όπως κλήσεις urlopen(), αντικείμενα Request και χειρισμό σφαλμάτων try/except. Επιταχύνει το τυποποιημένο πρότυπο, αλλά θα πρέπει να επαληθεύσετε τα URLs, κεφαλίδες και χειρισμός εξαιρέσεων που προτείνει ο βοηθός AI.

Κωδικοποιήστε τις παραμέτρους σας με την urllib.parse.urlencode(), μετατρέψτε τις σε bytes με την encode() και, στη συνέχεια, περάστε τες ως όρισμα δεδομένων στην urlopen() ή σε ένα αντικείμενο Request. Η παροχή δεδομένων κάνει αυτόματα την urllib να στέλνει ένα αίτημα POST αντί για ένα αίτημα GET.

Συνοψίστε αυτήν την ανάρτηση με: