Hogyan lehet kaparni egy témakör listát egy alredditből a Bash használatával

Mar 26, 2025
Felhő és Internet
Fatmawati Achmad Zaenuri / Shutterstock.com

A Reddit JSON-hírcsatornákat kínál minden alprogramhoz. Így hozhat létre olyan Bash szkriptet, amely letölti és elemzi a hozzászólások listáját bármilyen tetszőleges alprogramból. Ez csak egy dolog, amit tehet a Reddit JSON-hírcsatornáival.

A Curl és a JQ telepítése

Használni fogjuk becsavar hogy lehívja a JSON hírcsatornát a Reddit és jq a JSON-adatok elemzése és a kívánt mezők kibontása az eredményekből. Telepítse ezt a két függőséget a apt-get az Ubuntu és más Debian-alapú Linux disztribúciókon. Más Linux disztribúciók esetén használja a disztribúció csomagkezelő eszközét.

sudo apt-get install curl jq

Hívjon néhány JSON-adatot a Redditből

Lássuk, hogyan néz ki az adatcsatorna. Használat becsavar letölteni a legfrissebb bejegyzéseket a Enyhén Érdekes subreddit:

curl -s - „Reddit lehúzó példa” https://www.reddit.com/r/MildlyInteresting.json

Vegye figyelembe, hogy az URL előtt használt opciók: -s arra kényszeríti a curl-t, hogy csendes üzemmódban fusson, így nem látunk semmilyen kimenetet, kivéve a Reddit szervereiről származó adatokat. A következő opció és az azt követő paraméter, -Reddit lehúzó példa , beállít egy egyéni felhasználói ügynök karakterláncot, amely segít a Reddit-nek azonosítani az adataikhoz hozzáférő szolgáltatást. A Reddit API-kiszolgálók sebességkorlátokat alkalmaznak a felhasználói ügynök karakterláncán alapulva. Egyéni érték beállítása arra készteti a Reddit-t, hogy szegmensünket szegmentálja más hívóktól, és csökkentse annak esélyét, hogy HTTP 429-es túllépési sebesség túllépési hibát kapjunk.

A kimenetnek ki kell töltenie a terminál ablakát, és így kell kinéznie:

Rengeteg mező van a kimeneti adatokban, de csak a cím, az állandó link és az URL érdekel minket. A típusok és azok mezőinek teljes listáját a Reddit API dokumentációs oldalán láthatja: https://github.com/reddit-archive/reddit/wiki/JSON

Adatok kinyerése a JSON kimenetből

Szeretnénk kibontani a címet, az állandó linket és az URL-t a kimeneti adatokból, és egy tabulátorral elválasztott fájlba menteni. Használhatunk például szövegszerkesztő eszközöket és és markolat , de van egy másik eszközünk, amely megérti a JSON adatstruktúrákat, az úgynevezett jq . Első kísérletünkre használjuk a kimenet szép nyomtatásához és színkódolásához. Ugyanazt a hívást fogjuk használni, mint korábban, de ezúttal vezesse át a kimenetet jq és utasítsa a JSON-adatok elemzésére és kinyomtatására.

curl -s -A „reddit lehúzó példa” https://www.reddit.com/r/MildlyInteresting.json | jq.

Vegye figyelembe a parancsot követő időszakot. Ez a kifejezés egyszerűen elemzi a bemenetet és kinyomtatja. A kimenet szépen formázott és színkódolt:

Vizsgáljuk meg a Reddit-től visszakapott JSON-adatok szerkezetét. A gyökéreredmény egy olyan objektum, amely két tulajdonságot tartalmaz: fajta és adat. Ez utóbbi birtokában van egy úgynevezett ingatlan gyermekek , amely tartalmaz egy sor bejegyzést ehhez a subreddithez.

A tömb minden eleme egy objektum, amely két fajta és adat mezőt is tartalmaz. Azok a tulajdonságok, amelyeket meg akarunk ragadni, az adatobjektumban találhatók. jq olyan kifejezést vár, amely alkalmazható a bemeneti adatokra, és előállítja a kívánt kimenetet. Le kell írnia a tartalmat hierarchiájuk és tömb tagságuk szempontjából, valamint azt, hogy az adatokat hogyan kell átalakítani. Futtassuk újra az egész parancsot a helyes kifejezéssel:

curl -s -A „reddit lehúzó példa” https://www.reddit.com/r/MildlyInteresting.json | jq ’.adatok.gyerekek | . [] | .data.title, .data.url, .data.permalink ’

A kimenet a címet, az URL-t és az állandó linket a saját sorukon mutatja:

Merüljünk el a jq parancsot hívtuk:

jq ’.adatok.gyerekek | . [] | .data.title, .data.url, .data.permalink ’

Ebben a parancsban három kifejezés van, amelyeket két csőszimbólum választ el. Az egyes kifejezések eredményeit továbbadjuk a következőnek további értékelés céljából. Az első kifejezés mindent kiszűr, kivéve a Reddit listák tömbjét. Ez a kimenet a második kifejezésbe kerül és egy tömbbe kényszerül. A harmadik kifejezés a tömb minden elemére hat, és három tulajdonságot von ki. További információ jq és kifejezési szintaxisa megtalálható a jq hivatalos kézikönyve .

Az egészet összeírva egy szkriptben

Helyezzük össze az API hívást és a JSON utófeldolgozást egy szkriptbe, amely létrehoz egy fájlt a kívánt bejegyzésekkel. Támogatást fogunk adni a bejegyzések letöltéséhez bármilyen subredditből, nem csak a / r / MildlyInteresting szolgáltatásból.

Nyissa meg a szerkesztőt, és másolja a kódrészlet tartalmát a scrape-reddit.sh nevű fájlba

#! / bin / bash

ha [ -z "$1" ]
  azután
    echo "Kérjük, adjon meg egy albreddit"
    kilépés 1
fi

SUBREDDIT = 1 USD
MOST = $ (dátum + "% m_% d_% y-% H_% M")
OUTPUT_FILE = "$ {SUBREDDIT}_ $ {NOW}.txt"

göndör -s -A "bash-kaparós témák" https://www.reddit.com/r/${SUBREDDIT}.json | \
        jq '.adatok.gyerekek | . [] | .data.title, .data.url, .data.permalink '| \
        olvasás közben -r TITLE; csináld
                read -r URL
                olvassa -r PERMALINK
                echo -e "$ {TITLE} \ t $ {URL} \ t $ {PERMALINK}" | tr --delete \ ">> {OUTPUT_FILE} USD
        Kész

Ez a szkript először ellenőrzi, hogy a felhasználó megadta-e a subbreddit nevet. Ha nem, akkor hibaüzenettel és nullától eltérő visszatérési kóddal lép ki.

Ezután tárolja az első argumentumot subreddit névként, és felépíti a dátummal bélyegzett fájlnevet, ahová a kimenet mentésre kerül.

A cselekvés akkor kezdődik becsavar meghívásra kerül egy egyéni fejléccel és a kaparandó albreddit URL-jével. A kimenetet csövezzük jq ahol elemzett és három mezőre redukálva van: Cím, URL és Permalink. Ezeket a sorokat egyszerre olvassuk el, és a read paranccsal egy változóba mentsük őket, mindezt egy darab ciklus belsejében, amely addig folytatódik, amíg nincs több sor olvasható. A belső, míg a belső blokk utolsó sora visszhangozza a három mezőt, amelyet egy tabulátor karakter határoz meg, majd átvezeti a tr parancsot, hogy a dupla idézőjelek lehúzhatók legyenek. A kimenetet ezután egy fájlhoz csatolják.

Mielőtt futtathatnánk ezt a szkriptet, meg kell győződnünk arról, hogy megkapta-e végrehajtási engedélyeket. Használja a chmod parancs az alábbi engedélyek alkalmazásához a fájlhoz:

chmod u + x kaparás-reddit.sh

Végül hajtsa végre a szkriptet egy subbreddit névvel:

./scrape-reddit.sh Enyhén Érdekes

A kimeneti fájl ugyanazt a könyvtárat hozza létre, és annak tartalma így néz ki:

Minden sor azt a három mezőt tartalmazza, amelyek után vagyunk, egy tabulátor karakterrel elválasztva.

Tovább megyek

A Reddit érdekes tartalom és média aranybányája, és mindez könnyen elérhető a JSON API segítségével. Most, hogy módja van hozzáférni ezekhez az adatokhoz és feldolgozni az eredményeket, a következőket teheti:

  • Fogja meg a / r / WorldNews legfrissebb címsorait, és a gombbal küldje el az asztalra értesít-küld
  • Integrálja a / r / DadJokes legjobb poénjait a rendszer napi üzenetébe
  • Szerezd meg a mai legjobb képet a / r / aww fájlból, és állítsd az asztal hátterévé

Mindez a rendelkezésre álló adatok és a rendszeren lévő eszközök segítségével lehetséges. Boldog hackelést!

.entry-tartalom .entry-footer

Using Scrapy On Reddit.com


Felhő és Internet - Most Popular Articles

Hogyan lehet elkerülni a bántalmazó online játékosokat

Felhő és Internet Jul 19, 2025

Egy bölcs ember azt mondta egyszer, hogy egy normális ember, plusz névtelenség, plusz a közönség egyenlő ... nos, valami, amit nem tudunk újranyomtatni egy családbarát we..


Hogyan tekinthető meg, hogy mennyit költött az Amazon-on

Felhő és Internet Feb 16, 2025

BETŰTELEN TARTALOM Gondolkodott már azon, hogy mennyit költött az Amazon-on életében? Akár kíváncsinak érzi magát, akár egyszerűen bátornak, van egy egyszerű módja..


Hogyan hozzunk létre egyéni billentyűparancsokat a bővítményekhez a Google Chrome-ban

Felhő és Internet Jan 4, 2025

A stréberek imádják a billentyűparancsokat - gyakran gyorsabbak, mint az egérrel mindenre kattintani. Korábban kitértünk rá A Chrome és más böngészők számos b..


Hozzáférés a Mac fájljaihoz és képernyőjéhez az Interneten a Vissza a Saját Mac-hez funkcióval

Felhő és Internet Jun 10, 2025

BETŰTELEN TARTALOM A Mac-ek beépített módon hozzáférhetnek a Mac fájljaihoz és képernyőjéhez a világ bármely pontjáról. A „Vissza a Mac-hez” funkció ingyenes, ..


Hogyan használjuk a Spoon.net alkalmazást virtuális felhő számítógépen történő teszteléséhez

Felhő és Internet Jan 30, 2025

A kiszolgálóoldali alkalmazások futtatásának gondolata nem új keletű, de valójában nem egy olyan koncepció, amely könnyen társítható a mindennapi alkalmazásokhoz, pé..


Az uTorrent távvezérlése a mobiltelefonról

Felhő és Internet Aug 19, 2025

BETŰTELEN TARTALOM Geek vagy útközben, és fontos, hogy tartsd a füledet a torrentjeiden, ha távol vagy otthonról. Ma elérjük a csúcsot, amikor figyelemmel kísérheted, ..


Tekintse meg a kapcsolódó weboldal tartalmát a Firefoxban a Glydo segítségével

Felhő és Internet Feb 11, 2025

BETŰTELEN TARTALOM Könnyű módot keres a jelenleg megtekintett weblapok tartalmának megtalálásához? Talán csak lépést akar tartani a legfrissebb hírekkel. Most élvezheti mindket..


Hozzon létre egy parancsikont a címzett e-mail küldéséhez közvetlenül az asztaláról

Felhő és Internet Aug 21, 2025

Vannak olyan esetek, amikor olvas valamit az interneten, vagy ötletel, és gyorsan szeretne e-mailt küldeni egy barátjának vagy kollégának? Lehet, hogy nehéz elhinni, de néhány ember..


Kategóriák