Πώς να αποκόψετε μια λίστα θεμάτων από ένα Subreddit χρησιμοποιώντας το Bash

Mar 26, 2025
Cloud και Διαδίκτυο
Fatmawati Achmad Zaenuri / Shutterstock.com

Το Reddit προσφέρει τροφοδοσίες JSON για κάθε subreddit. Δείτε πώς μπορείτε να δημιουργήσετε ένα σενάριο Bash που κατεβάζει και αναλύει μια λίστα αναρτήσεων από οποιοδήποτε subreddit που σας αρέσει. Αυτό είναι μόνο ένα πράγμα που μπορείτε να κάνετε με τις ροές JSON του Reddit.

Εγκατάσταση Curl και JQ

Θα χρησιμοποιήσουμε μπούκλα για τη λήψη της ροής JSON από το Reddit και jq να αναλύσει τα δεδομένα JSON και να εξαγάγει τα πεδία που θέλουμε από τα αποτελέσματα. Εγκαταστήστε αυτές τις δύο εξαρτήσεις χρησιμοποιώντας καταλαβαίνω σε Ubuntu και άλλες διανομές Linux που βασίζονται στο Debian. Σε άλλες διανομές Linux, χρησιμοποιήστε το εργαλείο διαχείρισης πακέτων της διανομής σας.

sudo apt-get install curl jq

Λήψη ορισμένων δεδομένων JSON από το Reddit

Ας δούμε πώς είναι η ροή δεδομένων. Χρήση μπούκλα για λήψη των τελευταίων δημοσιεύσεων από το Ήπια ενδιαφέροντα subreddit:

curl -s -Ένα "reddit scraper παράδειγμα" https://www.reddit.com/r/MildlyInteresting.json

Σημειώστε πώς χρησιμοποιούνται οι επιλογές πριν από τη διεύθυνση URL: -μικρό αναγκάζει το curl να τρέχει σε σιωπηλή λειτουργία, ώστε να μην βλέπουμε καμία έξοδο, εκτός από τα δεδομένα από τους διακομιστές του Reddit. Η επόμενη επιλογή και η παράμετρος που ακολουθεί, -Ένα "reddit scraper παράδειγμα" , ορίζει μια προσαρμοσμένη συμβολοσειρά παράγοντα χρήστη που βοηθά το Reddit να αναγνωρίσει την υπηρεσία που αποκτά πρόσβαση στα δεδομένα τους. Οι διακομιστές Reddit API εφαρμόζουν όρια τιμών βάσει της συμβολοσειράς παράγοντα χρήστη. Ο καθορισμός μιας προσαρμοσμένης τιμής θα κάνει το Reddit να τμηματοποιήσει το όριο τιμών μας μακριά από άλλους καλούντες και να μειώσει την πιθανότητα να λάβουμε σφάλμα HTTP 429 Rate Limit Υπέρβαση.

Η έξοδος θα πρέπει να γεμίσει το παράθυρο του τερματικού και να μοιάζει με αυτό:

Υπάρχουν πολλά πεδία στα δεδομένα εξόδου, αλλά το μόνο που μας ενδιαφέρει είναι Τίτλος, Μόνιμος σύνδεσμος και διεύθυνση URL. Μπορείτε να δείτε μια αναλυτική λίστα τύπων και τα πεδία τους στη σελίδα τεκμηρίωσης του Reddit API: ήττψ://γιθοβ.κομ/ρεδδιτ-αρχιβε/ρεδδιτ/βίκυ/ΞΣΩΝ

Εξαγωγή δεδομένων από την έξοδο JSON

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

curl -s -Ένα "reddit scraper παράδειγμα" https://www.reddit.com/r/MildlyInteresting.json | jq.

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

Ας εξετάσουμε τη δομή των δεδομένων JSON που λαμβάνουμε από το Reddit. Το ριζικό αποτέλεσμα είναι ένα αντικείμενο που περιέχει δύο ιδιότητες: είδος και δεδομένα. Το τελευταίο κατέχει μια ιδιότητα που ονομάζεται παιδιά , που περιλαμβάνει έναν πίνακα αναρτήσεων σε αυτό το δευτερεύον αρχείο.

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

curl -s -Ένα "reddit scraper παράδειγμα" https://www.reddit.com/r/MildlyInteresting.json | jq «.data.children | . [] | .data.title, .data.url, .data.permalink »

Η έξοδος εμφανίζει τον τίτλο, τη διεύθυνση URL και τον μόνιμο σύνδεσμο στη δική τους γραμμή:

Ας βυθίσουμε στο jq εντολή που καλέσαμε:

jq «.data.children | . [] | .data.title, .data.url, .data.permalink »

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

Βάζοντας τα όλα μαζί σε ένα σενάριο

Ας βάλουμε την κλήση API και την επεξεργασία μετά το JSON σε ένα σενάριο που θα δημιουργήσει ένα αρχείο με τις αναρτήσεις που θέλουμε. Θα προσθέσουμε υποστήριξη για ανάκτηση αναρτήσεων από οποιοδήποτε subreddit, όχι μόνο / r / MildlyInteresting.

Ανοίξτε τον επεξεργαστή σας και αντιγράψτε το περιεχόμενο αυτού του αποσπάσματος σε ένα αρχείο που ονομάζεται scrape-reddit.sh

#! / bin / bash

εάν [ -z "$1" ]
  έπειτα
    echo "Προσδιορίστε ένα δευτερεύον αρχείο"
    έξοδος 1
fi

SUBREDDIT = 1 $
ΤΩΡΑ = $ (ημερομηνία + "% m_% d_% y-% H_% M")
OUTPUT_FILE = "{SUBREDDIT}_ $ {NOW}.txt"

curl -s -A "bash-scrape-θέματα" https://www.reddit.com/r/${SUBREDDIT}.json | \
        jq '.data.children | . [] | .data.title, .data.url, .data.permalink '| \
        ενώ διαβάζετε -r ΤΙΤΛΟΣ κάνω
                read -r URL
                διαβάστε -r PERMALINK
                echo -e "{TITLE} $ \ t $ {URL} \ t $ {PERMALINK}" | tr - διαγραφή \ ">> {OUTPUT_FILE} $
        Ολοκληρώθηκε

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

Στη συνέχεια, θα αποθηκεύσει το πρώτο όρισμα ως το όνομα subreddit και θα δημιουργήσει ένα όνομα αρχείου με ημερομηνία-σήμανση όπου θα αποθηκευτεί η έξοδος.

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

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

chmod u + x scrape-reddit.sh

Και, τέλος, εκτελέστε το σενάριο με όνομα subreddit:

./scrape-reddit.sh Ήπια ενδιαφέροντα

Ένα αρχείο εξόδου δημιουργείται στον ίδιο κατάλογο και το περιεχόμενό του θα μοιάζει με αυτό:

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

Προχωρώντας περαιτέρω

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

  • Πιάστε τα πιο πρόσφατα πρωτοσέλιδα από / r / WorldNews και στείλτε τα στον υπολογιστή σας χρησιμοποιώντας ειδοποίηση-αποστολή
  • Ενσωματώστε τα καλύτερα αστεία από / r / DadJokes στο μήνυμα-Of-The-Day του συστήματός σας
  • Αποκτήστε τη σημερινή καλύτερη εικόνα από / r / aww και δημιουργήστε το ως φόντο της επιφάνειας εργασίας σας

Όλα αυτά είναι δυνατά χρησιμοποιώντας τα παρεχόμενα δεδομένα και τα εργαλεία που έχετε στο σύστημά σας. Καλό χάκερ!

περιεχόμενο .entry-υποσέλιδο

Using Scrapy On Reddit.com


Cloud και Διαδίκτυο - Τα πιο δημοφιλή άρθρα

Πώς να αλλάξετε την προεπιλεγμένη μηχανή αναζήτησης στο Safari σε iPhone ή iPad

Cloud και Διαδίκτυο Mar 18, 2025

ΑΠΕΛΕΥΘΕΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ Το Safari χρησιμοποιεί το Google ως την προεπιλεγμένη μηχανή αναζήτησης του,..


Πώς να μεταφέρετε φωτογραφίες από iPhone σε υπολογιστή

Cloud και Διαδίκτυο Apr 10, 2025

Δεν χρειάζεστε ειδικό λογισμικό για τη μεταφορά φωτογραφιών και βίντεο από iPhone σε υπολογιστή με Wind..


Πέντε εκπληκτικά χαρακτηριστικά Spotify για δημιουργία τέλειας λίστας αναπαραγωγής

Cloud και Διαδίκτυο May 23, 2025

ΑΠΕΛΕΥΘΕΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ Λατρεύω το Spotify. Ακούω εκατοντάδες ώρες μουσικής μαζί της κάθε χρόνο. Ε�..


Ο απόλυτος οδηγός για τη διαπραγμάτευση του καλωδίου, του κινητού τηλεφώνου και άλλων λογαριασμών

Cloud και Διαδίκτυο Oct 12, 2025

ΑΠΕΛΕΥΘΕΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ Οι πάροχοι σας - από την εταιρεία καλωδιακής σας έως την εταιρεία απορρ..


Οι καλύτερες εφαρμογές στιγμιότυπου οθόνης για macOS

Cloud και Διαδίκτυο Oct 15, 2025

Όποιος χρησιμοποιεί Mac τακτικά το γνωρίζει Δυνατότητες οθόνης macOS είναι αρκετά συμπαγή, αλ�..


Τρόπος εκκαθάρισης της προσωρινής μνήμης του προγράμματος περιήγησής σας στην έκδοση Metro του Internet Explorer

Cloud και Διαδίκτυο Sep 11, 2025

ΑΠΕΛΕΥΘΕΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ Η εκκαθάριση της προσωρινής μνήμης του προγράμματος περιήγησής σας γί..


Πώς να δημιουργήσετε ποιοτικές εκτυπώσεις φωτογραφιών με δωρεάν λογισμικό

Cloud και Διαδίκτυο Sep 20, 2025

Το Photoshop μπορεί να είναι το επαγγελματικό πρότυπο για εκτυπώσεις φωτογραφιών υψηλής ποιότητας, αλλ..


Αποστολή κειμένου και συνδέσμων μέσω του Windows Live Hotmail στο IE 8

Cloud και Διαδίκτυο Jun 29, 2025

ΑΠΕΛΕΥΘΕΡΩΣΗ ΠΕΡΙΕΧΟΜΕΝΟΥ Σας αρέσει να στέλνετε σημειώσεις και συνδέσμους στον εαυτό σας ή σε άλλους ..


Κατηγορίες