Σύνδεση σε ιστότοπους με Python

Logging Into Websites With Python



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

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







Για να κατανοήσετε αυτό το σεμινάριο και να μπορέσετε να γράψετε σενάρια για τη σύνδεση σε ιστότοπους, θα χρειαστείτε κάποια κατανόηση της HTML. Notσως όχι αρκετά για να δημιουργήσετε φοβερούς ιστότοπους, αλλά αρκετά για να κατανοήσετε τη δομή μιας βασικής ιστοσελίδας.



Αυτό θα γίνει με τις βιβλιοθήκες Requests και BeautifulSoup Python. Εκτός από αυτές τις βιβλιοθήκες Python, θα χρειαστείτε ένα καλό πρόγραμμα περιήγησης όπως το Google Chrome ή το Mozilla Firefox, καθώς θα ήταν σημαντικά για την αρχική ανάλυση πριν από την εγγραφή κώδικα.



Οι βιβλιοθήκες Requests and BeautifulSoup μπορούν να εγκατασταθούν με την εντολή pip από το τερματικό, όπως φαίνεται παρακάτω:





αιτήματα εγκατάστασης pip
pip εγκατάσταση BeautifulSoup4

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

Στη συνέχεια, εισαγάγετε και τις δύο βιβλιοθήκες:



εισαγωγήαιτήσεων
απόbs4εισαγωγήΌμορφη Σούπα

Η εισαγωγή είναι επιτυχής εάν δεν υπάρχουν σφάλματα.

Η διαδικασία

Η σύνδεση σε έναν ιστότοπο με σενάρια απαιτεί γνώση της HTML και μια ιδέα για το πώς λειτουργεί ο ιστός. Ας δούμε εν συντομία πώς λειτουργεί ο ιστός.

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

Όταν προσπαθείτε να ανοίξετε έναν ιστότοπο μέσω του συνδέσμου του, υποβάλλετε ένα αίτημα στην πλευρά του διακομιστή για να σας μεταφέρει τα αρχεία HTML και άλλα στατικά αρχεία, όπως CSS και JavaScript. Αυτό το αίτημα είναι γνωστό ως αίτημα GET. Ωστόσο, όταν συμπληρώνετε μια φόρμα, ανεβάζετε ένα αρχείο πολυμέσων ή ένα έγγραφο, δημιουργείτε μια ανάρτηση και κάνετε κλικ στο κουμπί ας πούμε υποβολή, στέλνετε πληροφορίες στην πλευρά του διακομιστή. Αυτό το αίτημα είναι γνωστό ως αίτημα POST.

Η κατανόηση αυτών των δύο εννοιών θα ήταν σημαντική κατά τη συγγραφή του σεναρίου μας.

Επιθεώρηση της ιστοσελίδας

Για να εξασκήσουμε τις έννοιες αυτού του άρθρου, θα χρησιμοποιούσαμε το Αποσπάσματα για ξύσιμο δικτυακός τόπος.

Η σύνδεση σε ιστότοπους απαιτεί πληροφορίες όπως το όνομα χρήστη και έναν κωδικό πρόσβασης.

Ωστόσο, δεδομένου ότι αυτός ο ιστότοπος χρησιμοποιείται μόνο ως απόδειξη της έννοιας, όλα πάνε. Επομένως θα χρησιμοποιούσαμε διαχειριστής ως όνομα χρήστη και 12345 ως κωδικός πρόσβασης.

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

Τώρα, σημειώστε το όνομα χαρακτηριστικό των ετικετών εισαγωγής για τα κουτιά ονόματος χρήστη και κωδικού πρόσβασης, θα ήταν απαραίτητα κατά τη σύνταξη του κώδικα. Για αυτόν τον ιστότοπο, το όνομα χαρακτηριστικό για το όνομα χρήστη και τον κωδικό πρόσβασης είναι όνομα χρήστη και Κωδικός πρόσβασης αντίστοιχα.

Στη συνέχεια, πρέπει να γνωρίζουμε εάν υπάρχουν άλλες παράμετροι που θα ήταν σημαντικές για τη σύνδεση. Ας το εξηγήσουμε γρήγορα αυτό. Για να αυξηθεί η ασφάλεια των ιστότοπων, συνήθως δημιουργούνται μάρκες για την αποτροπή επιθέσεων Cross Site Forgery.

Επομένως, εάν αυτά τα διακριτικά δεν προστεθούν στο αίτημα POST, τότε η σύνδεση θα αποτύχει. Πώς γνωρίζουμε λοιπόν για τέτοιες παραμέτρους;

Θα πρέπει να χρησιμοποιήσουμε την καρτέλα Δίκτυο. Για να αποκτήσετε αυτήν την καρτέλα στο Google Chrome ή το Mozilla Firefox, ανοίξτε τα Εργαλεία προγραμματιστή και κάντε κλικ στην καρτέλα Δίκτυο.

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

Δείτε τι θα κάναμε στη συνέχεια, ενώ είχαμε ανοιχτή την καρτέλα Δίκτυο. Βάλτε τα στοιχεία σύνδεσης και δοκιμάστε να συνδεθείτε, το πρώτο αίτημα που θα δείτε θα πρέπει να είναι το αίτημα POST.

Κάντε κλικ στο αίτημα POST και δείτε τις παραμέτρους της φόρμας. Θα παρατηρήσετε ότι ο ιστότοπος έχει ένα csrf_token παράμετρος με τιμή. Αυτή η τιμή είναι μια δυναμική τιμή, επομένως θα πρέπει να καταγράψουμε τέτοιες τιμές χρησιμοποιώντας το ΠΑΙΡΝΩ αίτηση πρώτα πριν χρησιμοποιήσετε το ΘΕΣΗ αίτηση.

Για άλλους ιστότοπους στους οποίους θα εργαζόσασταν, πιθανόν να μην τους βλέπετε csrf_token αλλά μπορεί να υπάρχουν και άλλες μάρκες που δημιουργούνται δυναμικά. Με την πάροδο του χρόνου, θα γνωρίζετε καλύτερα τις παραμέτρους που έχουν πραγματικά σημασία για την προσπάθεια σύνδεσης.

Ο κώδικας

Πρώτον, πρέπει να χρησιμοποιήσουμε τα Αιτήματα και το BeautifulSoup για να αποκτήσουμε πρόσβαση στο περιεχόμενο της σελίδας της σελίδας σύνδεσης.

απόαιτήσεωνεισαγωγήΣυνεδρία
απόbs4εισαγωγήΌμορφη Σούπαόπως καιbs

μεΣυνεδρία() όπως καιμικρό:
ιστοσελίδα =μικρό.παίρνω('http://quotes.toscrape.com/login')
Τυπώνω(ιστοσελίδαΤοπεριεχόμενο)

Αυτό θα εκτυπώσει το περιεχόμενο της σελίδας σύνδεσης πριν συνδεθούμε και αν αναζητήσετε τη λέξη -κλειδί σύνδεσης. Η λέξη -κλειδί θα βρίσκεται στο περιεχόμενο της σελίδας που δείχνει ότι δεν έχουμε ακόμη συνδεθεί.

Στη συνέχεια, θα ψάχναμε για το csrf_token λέξη -κλειδί που βρέθηκε ως μία από τις παραμέτρους κατά τη χρήση της καρτέλας δικτύου νωρίτερα. Εάν η λέξη -κλειδί εμφανίζει αντιστοιχία με ένα εισαγωγή ετικέτα, τότε η τιμή μπορεί να εξαχθεί κάθε φορά που εκτελείτε το σενάριο χρησιμοποιώντας το BeautifulSoup.

απόαιτήσεωνεισαγωγήΣυνεδρία
απόbs4εισαγωγήΌμορφη Σούπαόπως καιbs

μεΣυνεδρία() όπως καιμικρό:
ιστοσελίδα =μικρό.παίρνω('http://quotes.toscrape.com/login')
bs_content=bs(ιστοσελίδαΤοπεριεχόμενο, 'html.parser')
ένδειξη =bs_content.εύρημα('εισαγωγή', {'όνομα':'csrf_token'})['αξία']
login_data= {'όνομα χρήστη':'διαχειριστής','Κωδικός πρόσβασης':'12345', 'csrf_token':ένδειξη}
μικρό.Θέση('http://quotes.toscrape.com/login',login_data)
αρχική σελίδα=μικρό.παίρνω('http://quotes.toscrape.com')
Τυπώνω(αρχική σελίδα.περιεχόμενο)

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

Ας ρίξουμε μια ματιά σε κάθε γραμμή κώδικα.

απόαιτήσεωνεισαγωγήΣυνεδρία
απόbs4εισαγωγήΌμορφη Σούπαόπως καιbs

Οι παραπάνω γραμμές κώδικα χρησιμοποιούνται για την εισαγωγή του αντικειμένου συνεδρίας από τη βιβλιοθήκη αιτημάτων και του αντικειμένου BeautifulSoup από τη βιβλιοθήκη bs4 χρησιμοποιώντας ένα ψευδώνυμο bs Το

μεΣυνεδρία() όπως καιμικρό:

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

bs_content=bs(ιστοσελίδαΤοπεριεχόμενο, 'html.parser')
ένδειξη =bs_content.εύρημα('εισαγωγή', {'όνομα':'csrf_token'})['αξία']

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

login_data= {'όνομα χρήστη':'διαχειριστής','Κωδικός πρόσβασης':'12345', 'csrf_token':ένδειξη}
μικρό.Θέση('http://quotes.toscrape.com/login',login_data)

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

ο Θέση η μέθοδος χρησιμοποιείται για την αποστολή ενός αιτήματος μετάδοσης με τις παραμέτρους και την είσοδό μας.

αρχική σελίδα=μικρό.παίρνω('http://quotes.toscrape.com')
Τυπώνω(αρχική σελίδα.περιεχόμενο)

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

συμπέρασμα

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

Το πιο σημαντικό σε όλα αυτά είναι η γνώση HTML, Αιτημάτων, BeautifulSoup και η ικανότητα κατανόησης των πληροφοριών που έχετε από την καρτέλα Δίκτυο των εργαλείων προγραμματιστή του προγράμματος περιήγησής σας.