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

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

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





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





Εγκατάσταση Scrapy

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





Το Scrapy είναι διαθέσιμο μέσω της βιβλιοθήκης Pip Installs Python (PIP), εδώ είναι μια ανανέωση πώς να εγκαταστήσετε PIP σε Windows, Mac και Linux Το

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



Δημιουργήστε έναν κατάλογο και προετοιμάστε ένα εικονικό περιβάλλον.

ποιο είναι το μισό σημείο μεταξύ
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Τώρα μπορείτε να εγκαταστήσετε το Scrapy σε αυτόν τον κατάλογο χρησιμοποιώντας μια εντολή PIP.





pip install scrapy

Ένας γρήγορος έλεγχος για να βεβαιωθείτε ότι το Scrapy έχει εγκατασταθεί σωστά

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Πώς να δημιουργήσετε ένα πρόγραμμα ανίχνευσης ιστού

Τώρα που το περιβάλλον είναι έτοιμο, μπορείτε να ξεκινήσετε τη δημιουργία του προγράμματος ανίχνευσης ιστού. Ας διαγράψουμε μερικές πληροφορίες από μια σελίδα Wikipedia σχετικά με τις μπαταρίες: https://en.wikipedia.org/wiki/Battery_(electricity) Το





Το πρώτο βήμα για να γράψετε ένα πρόγραμμα ανίχνευσης είναι ο ορισμός μιας κλάσης Python που εκτείνεται από Scrapy. Αράχνη Το Αυτό σας δίνει πρόσβαση σε όλες τις λειτουργίες και τις δυνατότητες του Scrapy. Ας ονομάσουμε αυτό το μάθημα αράχνη1 Το

Μια τάξη αράχνης χρειάζεται μερικές πληροφορίες:

  • προς το όνομα για την αναγνώριση της αράχνης
  • προς το start_urls μεταβλητή που περιέχει μια λίστα διευθύνσεων URL από τις οποίες μπορείτε να ανιχνεύσετε (η διεύθυνση URL της Wikipedia θα είναι το παράδειγμα σε αυτό το σεμινάριο)
  • προς το αναλύω πρόταση() μέθοδο που χρησιμοποιείται για την επεξεργασία της ιστοσελίδας για την εξαγωγή πληροφοριών
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Μια γρήγορη δοκιμή για να βεβαιωθείτε ότι όλα λειτουργούν σωστά.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Απενεργοποίηση καταγραφής

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

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

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

Χρήση του Chrome Inspector

Τα πάντα σε μια ιστοσελίδα αποθηκεύονται σε στοιχεία HTML. Τα στοιχεία είναι ταξινομημένα στο Document Object Model (DOM). Η κατανόηση του DOM είναι ζωτικής σημασίας για να αξιοποιήσετε στο έπακρο τον ανιχνευτή ιστού. Ένας ανιχνευτής ιστού αναζητά όλα τα στοιχεία HTML σε μια σελίδα για να βρει πληροφορίες, οπότε είναι σημαντικό να γνωρίζουμε πώς είναι διατεταγμένα.

Το Google Chrome διαθέτει εργαλεία που σας βοηθούν να βρείτε πιο γρήγορα στοιχεία HTML. Μπορείτε να εντοπίσετε το HTML για οποιοδήποτε στοιχείο βλέπετε στην ιστοσελίδα χρησιμοποιώντας τον επιθεωρητή.

  • Μεταβείτε σε μια σελίδα στο Chrome
  • Τοποθετήστε το ποντίκι στο στοιχείο που θέλετε να δείτε
  • Κάντε δεξί κλικ και επιλέξτε Επιθεωρώ από το μενού

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

Εξαγωγή του Τίτλου

Ας πάρουμε το σενάριο να κάνει κάποια δουλειά για εμάς. Μια απλή ανίχνευση για να λάβετε το κείμενο του τίτλου της ιστοσελίδας.

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

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

ο απάντηση το όρισμα υποστηρίζει μια μέθοδο που ονομάζεται CSS () που επιλέγει στοιχεία από τη σελίδα χρησιμοποιώντας τη θέση που παρέχετε.

Σε αυτό το παράδειγμα, το στοιχείο είναι h1.firstHeading Το Προσθέτωντας

::text

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

Η εκτέλεση αυτού του σεναρίου στο Scrapy εκτυπώνει τον τίτλο σε μορφή κειμένου.

[u'Battery (electricity)']

Εύρεση της Περιγραφής

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

Ακολουθεί το δέντρο στοιχείων στην Κονσόλα προγραμματιστή του Chrome:

πώς να βρείτε το μοντέλο της μητρικής πλακέτας σας
div#mw-content-text>div>p

Το δεξί βέλος (>) υποδεικνύει τη σχέση γονέα-παιδιού μεταξύ των στοιχείων.

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

response.css('div#mw-content-text>div>p')[0]

Ακριβώς όπως και ο τίτλος, προσθέτετε CSS extractor

::text

για να λάβετε το περιεχόμενο κειμένου του στοιχείου.

response.css('div#mw-content-text>div>p')[0].css('::text')

Η τελική έκφραση χρησιμοποιεί εκχύλισμα() για επιστροφή της λίστας. Μπορείτε να χρησιμοποιήσετε το Python Συμμετοχή() συνάρτηση για τη συμμετοχή στη λίστα μόλις ολοκληρωθεί η ανίχνευση.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Το αποτέλεσμα είναι η πρώτη παράγραφος του κειμένου!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Συλλογή δεδομένων JSON

Το Scrapy μπορεί να εξαγάγει πληροφορίες σε μορφή κειμένου, κάτι που είναι χρήσιμο. Το Scrapy σάς επιτρέπει επίσης να δείτε τα δεδομένα JavaScript Object Notation (JSON). Το JSON είναι ένας τακτοποιημένος τρόπος οργάνωσης πληροφοριών και χρησιμοποιείται ευρέως στην ανάπτυξη ιστοσελίδων. Το JSON συνεργάζεται όμορφα με την Python επισης.

Όταν χρειάζεται να συλλέξετε δεδομένα ως JSON, μπορείτε να χρησιμοποιήσετε το απόδοση παραγωγής δήλωση ενσωματωμένη στο Scrapy.

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

γιατί το wifi μου λέει όχι internet
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Τώρα μπορείτε να τρέξετε την αράχνη καθορίζοντας ένα αρχείο εξόδου JSON:

scrapy runspider spider3.py -o joe.json

Το σενάριο θα εκτυπώσει τώρα όλα τα στοιχεία p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Ξύσιμο πολλαπλών στοιχείων

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

Ας εξαγάγουμε κορυφαίες επιτυχίες του IMDb Box Office για ένα Σαββατοκύριακο. Αυτές οι πληροφορίες αντλούνται από http://www.imdb.com/chart/boxoffice , σε έναν πίνακα με γραμμές για κάθε μέτρηση.

ο αναλύω πρόταση() μέθοδος μπορεί να εξαγάγει περισσότερα από ένα πεδία από τη σειρά. Χρησιμοποιώντας τα Chrome Developer Tools, μπορείτε να βρείτε τα στοιχεία που είναι τοποθετημένα μέσα στον πίνακα.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

ο εικόνα ο επιλογέας το καθορίζει img είναι απόγονος του td.posterColumn Το Για να εξαγάγετε το σωστό χαρακτηριστικό, χρησιμοποιήστε την έκφραση | _+_ |.

Το τρέξιμο της αράχνης επιστρέφει το JSON:

::attr(src)

Περισσότερα Scrapers Web και Bots

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

Αν ψάχνετε περισσότερους τρόπους για να δημιουργήσετε προγράμματα ανίχνευσης ή bots, μπορείτε να δοκιμάσετε δημιουργήστε Twitter και Instagram bots χρησιμοποιώντας Python Το Η Python μπορεί να δημιουργήσει μερικά καταπληκτικά πράγματα στην ανάπτυξη ιστού, οπότε αξίζει να ξεπεράσετε τα προγράμματα ανίχνευσης ιστού κατά την εξερεύνηση αυτής της γλώσσας.

Μερίδιο Μερίδιο Τιτίβισμα ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ 15 Εντολές γραμμής εντολών των Windows (CMD) που πρέπει να γνωρίζετε

Η γραμμή εντολών εξακολουθεί να είναι ένα ισχυρό εργαλείο Windows. Ακολουθούν οι πιο χρήσιμες εντολές CMD που πρέπει να γνωρίζει κάθε χρήστης των Windows.

Διαβάστε Επόμενο
Σχετικά θέματα
  • Προγραμματισμός
  • Εργαλεία για Webmasters
  • Προγραμματισμός
  • Πύθων
  • Φροντιστήρια κωδικοποίησης
  • Ανιχνευτές Ιστού
Σχετικά με τον Συγγραφέα Άντονι Γκραντ(Δημοσιεύθηκαν 40 άρθρα)

Ο Anthony Grant είναι ένας ανεξάρτητος συγγραφέας που καλύπτει προγραμματισμό και λογισμικό. Είναι ειδικός στην Πληροφορική που ασχολείται με προγραμματισμό, Excel, λογισμικό και τεχνολογία.

Περισσότερα από τον Anthony Grant

Εγγραφείτε στο newsletter μας

Εγγραφείτε στο ενημερωτικό μας δελτίο για τεχνικές συμβουλές, κριτικές, δωρεάν ebooks και αποκλειστικές προσφορές!

Κάντε κλικ εδώ για εγγραφή