Python Πρόσβαση στο Διαδίκτυο χρησιμοποιώντας Urllib.Request και urlopen()
⚡ Έξυπνη Σύνοψη
Το urllib είναι το πρότυπο Python ενότητα για πρόσβαση σε δεδομένα διαδικτύου, επιτρέποντας στο πρόγραμμα να ανοίγει URLs και να ανακτήσετε περιεχόμενο HTML, JSON ή δυαδικό. Η συνάρτηση urllib.request.urlopen() συνδέεται με μια διεύθυνση ιστού και διαβάζει την απόκριση του διακομιστή απευθείας σε Python.

Οι παρακάτω ενότητες εξηγούν τι είναι το 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».
- Εισαγωγή urllib
- Καθορίστε την κύρια λειτουργία σας
- Δηλώστε τη μεταβλητή webUrl
- Στη συνέχεια, καλέστε τη συνάρτηση urlopen στη βιβλιοθήκη urllib
- The URL ανοίγουμε είναι το Guru99 σεμινάρια για YouTube
- Στη συνέχεια, εκτυπώνουμε τον κώδικα αποτελέσματος
- Ο κωδικός αποτελέσματος ανακτάται καλώντας τη συνάρτηση getcode στη μεταβλητή webUrl που έχουμε δημιουργήσει.
- Το μετατρέπουμε σε συμβολοσειρά, έτσι ώστε να μπορεί να συνενωθεί με τη συμβολοσειρά μας "κώδικας αποτελέσματος"
- Αυτός θα είναι ένας κανονικός κωδικός HTTP "200", που υποδεικνύει ότι το αίτημα HTTP υποβλήθηκε σε επεξεργασία με επιτυχία.
Πώς να λάβετε ένα αρχείο HTML από ένα URL in Python
Μπορείτε επίσης να διαβάσετε το αρχείο HTML χρησιμοποιώντας τη συνάρτηση read() στο PythonΌταν εκτελείτε τον κώδικα, το αρχείο HTML θα εμφανιστεί στην κονσόλα.
- Καλέστε τη συνάρτηση 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, επομένως η απόφαση εξαρτάται από την ευκολία σε σχέση με μια μικρότερη λίστα εξαρτήσεων.


