Cara Mengikis Daftar Topik dari Subreddit Menggunakan Bash

Mar 26, 2025
Cloud dan Internet
Fatmawati Achmad Zaenuri/Shutterstock.com

Reddit menawarkan umpan JSON untuk setiap subreddit. Berikut cara membuat skrip Bash yang mendownload dan mengurai daftar postingan dari subreddit apa pun yang Anda suka. Ini hanya satu hal yang dapat Anda lakukan dengan umpan JSON Reddit.

Menginstal Curl dan JQ

Kami akan menggunakan keriting untuk mengambil umpan JSON dari Reddit dan jq untuk mengurai data JSON dan mengekstrak bidang yang kita inginkan dari hasil. Instal kedua dependensi ini menggunakan apt-get di Ubuntu dan distribusi Linux berbasis Debian lainnya. Di distribusi Linux lainnya, gunakan alat manajemen paket distribusi Anda.

sudo apt-get install curl jq

Ambil Beberapa Data JSON dari Reddit

Mari kita lihat seperti apa data feed itu. Menggunakan keriting untuk mengambil kiriman terbaru dari Sedikit Menarik subreddit:

curl -s -Sebuah "contoh pengikis reddit" https://www.reddit.com/r/MildlyInteresting.json

Perhatikan bagaimana opsi digunakan sebelum URL: -s memaksa curl untuk berjalan dalam mode senyap sehingga kami tidak melihat keluaran apa pun, kecuali data dari server Reddit. Opsi selanjutnya dan parameter yang mengikuti, -Sebuah "contoh pengikis reddit" , menyetel string agen pengguna khusus yang membantu Reddit mengidentifikasi layanan yang mengakses datanya. Server API Reddit menerapkan batas kecepatan berdasarkan string agen pengguna. Menetapkan nilai khusus akan menyebabkan Reddit menyegmentasikan batas tarif kami dari penelepon lain dan mengurangi kemungkinan kami mendapatkan kesalahan HTTP 429 Batas Batas Terlampaui.

Outputnya akan memenuhi jendela terminal dan terlihat seperti ini:

Ada banyak bidang dalam data keluaran, tetapi yang kami minati hanyalah Judul, Tautan Permanen, dan URL. Anda dapat melihat daftar lengkap jenis dan bidangnya di halaman dokumentasi API Reddit: https://github.com/reddit-archive/reddit/wiki/JSON

Mengekstrak Data dari Output JSON

Kami ingin mengekstrak Judul, Tautan Permanen, dan URL, dari data keluaran dan menyimpannya ke file tab-delimited. Kita dapat menggunakan alat pengolah teks seperti dan dan pegangan , tetapi kami memiliki alat lain yang kami miliki yang memahami struktur data JSON, yang disebut jq . Untuk percobaan pertama kita, mari kita gunakan untuk mencetak cantik dan memberi kode warna pada keluaran. Kami akan menggunakan panggilan yang sama seperti sebelumnya, tetapi kali ini, menyalurkan keluarannya jq dan perintahkan untuk mengurai dan mencetak data JSON.

curl -s -Sebuah "contoh pengikis reddit" https://www.reddit.com/r/MildlyInteresting.json | jq.

Perhatikan periode setelah perintah. Ekspresi ini hanya mengurai input dan mencetaknya sebagaimana adanya. Outputnya tampak diformat dengan baik dan diberi kode warna:

Mari kita periksa struktur data JSON yang kita dapatkan dari Reddit. Hasil root adalah objek yang berisi dua properti: jenis dan data. Yang terakhir memegang properti yang disebut anak-anak , yang menyertakan larik postingan ke subreddit ini.

Setiap item dalam larik adalah objek yang juga berisi dua bidang yang disebut jenis dan data. Properti yang ingin kita ambil ada di objek data. jq mengharapkan ekspresi yang dapat diterapkan ke data masukan dan menghasilkan keluaran yang diinginkan. Ini harus mendeskripsikan konten dalam hal hierarki dan keanggotaannya pada sebuah array, serta bagaimana data harus diubah. Mari kita jalankan kembali seluruh perintah dengan ekspresi yang benar:

curl -s -Sebuah "contoh pengikis reddit" https://www.reddit.com/r/MildlyInteresting.json | jq ‘.data.children | . [] | .data.title, .data.url, .data.permalink ’

Outputnya menunjukkan Judul, URL, dan Tautan Permanen masing-masing di barisnya sendiri:

Mari selami jq perintah yang kami panggil:

jq ‘.data.children | . [] | .data.title, .data.url, .data.permalink ’

Ada tiga ekspresi dalam perintah ini yang dipisahkan oleh dua simbol pipa. Hasil dari setiap ekspresi diteruskan ke yang berikutnya untuk evaluasi lebih lanjut. Ekspresi pertama memfilter semuanya kecuali larik daftar Reddit. Output ini disalurkan ke ekspresi kedua dan dipaksa menjadi array. Ekspresi ketiga bekerja pada setiap elemen dalam larik dan mengekstrak tiga properti. Informasi lebih lanjut tentang jq dan sintaks ekspresinya dapat ditemukan di manual resmi jq .

Menyatukan Semuanya dalam Skrip

Mari kita gabungkan panggilan API dan pasca-pemrosesan JSON dalam skrip yang akan menghasilkan file dengan postingan yang kita inginkan. Kami akan menambahkan dukungan untuk mengambil postingan dari subreddit mana pun, tidak hanya / r / MildlyInteresting.

Buka editor Anda dan salin konten potongan ini ke dalam file bernama scrape-reddit.sh

#! / bin / bash

jika [ -z "$1" ]
  kemudian
    echo "Harap tentukan subreddit"
    keluar 1
fi

SUBREDDIT = $ 1
SEKARANG = $ (tanggal + "% m_% d_% y-% H_% M")
OUTPUT_FILE = "$ {SUBREDDIT}_ $ {NOW}.txt"

curl -s -A "bash-scrape-topics" https://www.reddit.com/r/${SUBREDDIT}.json | \
        jq '.data.children | . [] | .data.title, .data.url, .data.permalink '| \
        saat membaca -r TITLE; melakukan
                baca -r URL
                baca -r PERMALINK
                echo -e "$ {TITLE} \ t $ {URL} \ t $ {PERMALINK}" | tr --hapus \ ">> $ {OUTPUT_FILE}
        selesai

Skrip ini pertama-tama akan memeriksa apakah pengguna telah memberikan nama subreddit. Jika tidak, itu keluar dengan pesan kesalahan dan kode pengembalian bukan nol.

Selanjutnya, ini akan menyimpan argumen pertama sebagai nama subreddit, dan membangun nama file dengan cap tanggal di mana output akan disimpan.

Tindakan dimulai saat keriting dipanggil dengan tajuk khusus dan URL subreddit untuk dikikis. Outputnya disalurkan ke jq yang diurai dan dikurangi menjadi tiga bidang: Judul, URL, dan Tautan Permanen. Baris-baris ini dibaca, satu per satu, dan disimpan ke dalam variabel menggunakan perintah baca, semua di dalam while loop, yang akan berlanjut sampai tidak ada lagi baris untuk dibaca. Baris terakhir dari bagian dalam sementara blok menggemakan tiga bidang, dibatasi oleh karakter tab, dan kemudian menyalurkannya melalui tr perintah sehingga tanda kutip ganda bisa dihapus. Outputnya kemudian ditambahkan ke file.

Sebelum kami dapat menjalankan skrip ini, kami harus memastikan bahwa skrip tersebut telah diberikan izin eksekusi. Menggunakan chmod.dll perintah untuk menerapkan izin ini ke file:

chmod u + x scrape-reddit.sh

Dan, terakhir, jalankan skrip dengan nama subreddit:

./scrape-reddit.sh MildlyInteresting

File keluaran dibuat di direktori yang sama dan isinya akan terlihat seperti ini:

Setiap baris berisi tiga bidang yang kita cari, dipisahkan menggunakan karakter tab.

Pergi Lebih Jauh

Reddit adalah tambang emas konten dan media yang menarik, dan semuanya mudah diakses menggunakan JSON API-nya. Sekarang setelah Anda memiliki cara untuk mengakses data ini dan memproses hasilnya, Anda dapat melakukan hal-hal seperti:

  • Dapatkan berita utama terbaru dari / r / WorldNews dan kirimkan ke desktop Anda menggunakan notify-send
  • Integrasikan lelucon terbaik dari / r / DadJokes ke dalam Message-Of-The-Day sistem Anda
  • Dapatkan gambar terbaik hari ini dari / r / aww dan jadikan sebagai latar desktop Anda

Semua ini dimungkinkan dengan menggunakan data yang disediakan dan alat yang Anda miliki di sistem Anda. Selamat meretas!

Using Scrapy On Reddit.com


Cloud dan Internet - Artikel Terpopuler

Cara Menerbitkan Kalender Outlook Anda Dari Outlook.com

Cloud dan Internet Aug 21, 2025

KONTEN TIDAK CACHED Outlook memungkinkan Anda berbagi kalender dengan setiap orang, tapi Anda juga bisa menerbitkan kalender Anda sehingga siapa pun dengan link yang tepat bisa me..


Panduan Pemula untuk Google Formulir

Cloud dan Internet Aug 6, 2025

Apakah Anda baru saja mulai menggunakan Google Formulir? Belum pernah dengar sebelumnya? Apa pun pilihannya, berikut beberapa kiat untuk membantu Anda menggunakan alat formulir cang..


Cara Menambah dan Menghapus Tema di Chrome

Cloud dan Internet Mar 13, 2025

Google Chrome memungkinkan Anda mempersonalisasi pengalaman Anda dengan tema untuk membuat segalanya menjadi sedikit lebih menyenangkan, dan dengan rilis terbaru dari tampilan yang ..


Tandai Halaman Pengaturan Chrome untuk Akses Lebih Cepat Nanti

Cloud dan Internet Jul 21, 2025

Google Chrome chrome internal: // halaman penuh dengan semua jenis statistik, alat, dan fitur eksperimental (seperti setelan lanjutan browser lain ap..


Cara Menemukan Alamat IP dan MAC Apple TV Anda

Cloud dan Internet Nov 27, 2024

Untuk konfigurasi router tertentu, jaringan bersama (seperti yang ditemukan di hotel dan asrama), dan situasi lain, penting untuk mengidentifikasi alamat IP dan / atau MAC Apple TV ..


Membuat Internet Explorer Membuka Kumpulan Tab Berbeda Berdasarkan Hari Dalam Seminggu

Cloud dan Internet Jun 3, 2025

KONTEN TIDAK CACHED Jika Anda harus menggunakan Internet Explorer untuk bekerja dan perlu membuka sekumpulan tab khusus pekerjaan yang berbeda setiap hari, adakah cara cepat dan m..


Perbedaan Antara .com, .net, .org dan Mengapa Kami Ingin Melihat Banyak Lagi Domain Tingkat Atas

Cloud dan Internet Oct 15, 2025

.com, .net, .org dan sufiks situs web lainnya dikenal sebagai "domain level teratas" (TLD). Meskipun biasanya kami hanya melihat beberapa di antaranya, ada ratusan - dan mungkin seg..


Memperbaiki Masalah Pengguliran Firefox dengan Dell Synaptics Touchpad

Cloud dan Internet Feb 4, 2025

KONTEN TIDAK CACHED Seperti yang diketahui oleh sebagian besar pembaca reguler, saya baru-baru ini dapat menikmati laptop Dell baru yang super apik — hanya ada satu masalah kecil: touchpa..


Kategori