Làm thế nào để trích xuất một danh sách các chủ đề từ một Subreddit bằng cách sử dụng Bash

Mar 26, 2025
Đám mây và Internet
Fatmawati Achmad Zaenuri / Shutterstock.com

Reddit cung cấp nguồn cấp dữ liệu JSON cho mỗi subreddit. Dưới đây là cách tạo tập lệnh Bash tải xuống và phân tích cú pháp danh sách các bài đăng từ bất kỳ subreddit nào bạn thích. Đây chỉ là một điều bạn có thể làm với nguồn cấp dữ liệu JSON của Reddit.

Cài đặt Curl và JQ

Chúng tôi sẽ sử dụng Xoăn để tìm nạp nguồn cấp JSON từ Reddit và jq để phân tích cú pháp dữ liệu JSON và trích xuất các trường chúng tôi muốn từ kết quả. Cài đặt hai phần phụ thuộc này bằng cách sử dụng apt-get trên Ubuntu và các bản phân phối Linux dựa trên Debian khác. Trên các bản phân phối Linux khác, hãy sử dụng công cụ quản lý gói của bản phân phối của bạn.

sudo apt-get install curl jq

Tìm nạp một số dữ liệu JSON từ Reddit

Hãy xem nguồn cấp dữ liệu trông như thế nào. Sử dụng Xoăn để tải các bài đăng mới nhất từ MildlyInteresting subreddit:

curl -s -A “ví dụ về máy quét reddit” https://www.reddit.com/r/MildlyInteresting.json

Lưu ý cách sử dụng các tùy chọn trước URL: -S buộc curl chạy ở chế độ im lặng để chúng tôi không thấy bất kỳ đầu ra nào, ngoại trừ dữ liệu từ máy chủ của Reddit. Tùy chọn tiếp theo và tham số theo sau, -Một “ví dụ về máy quét reddit” , đặt chuỗi tác nhân người dùng tùy chỉnh giúp Reddit xác định dịch vụ đang truy cập dữ liệu của họ. Máy chủ API Reddit áp dụng giới hạn tốc độ dựa trên chuỗi tác nhân người dùng. Việc đặt giá trị tùy chỉnh sẽ khiến Reddit phân đoạn giới hạn tỷ lệ của chúng tôi khỏi những người gọi khác và giảm khả năng chúng tôi gặp lỗi Đã vượt quá giới hạn tỷ lệ HTTP 429.

Đầu ra sẽ lấp đầy cửa sổ đầu cuối và trông giống như sau:

Có rất nhiều trường trong dữ liệu đầu ra, nhưng tất cả những gì chúng tôi quan tâm là Tiêu đề, Permalink và URL. Bạn có thể xem danh sách đầy đủ các loại và trường của chúng trên trang tài liệu API của Reddit: https://github.com/reddit-archive/reddit/wiki/JSON

Trích xuất dữ liệu từ đầu ra JSON

Chúng tôi muốn trích xuất Title, Permalink và URL, từ dữ liệu đầu ra và lưu nó vào một tệp được phân tách bằng tab. Chúng ta có thể sử dụng các công cụ xử lý văn bản như nắm chặt , nhưng chúng tôi có một công cụ khác có thể hiểu cấu trúc dữ liệu JSON, được gọi là jq . Đối với nỗ lực đầu tiên của chúng tôi, hãy sử dụng nó để in đẹp và mã màu cho đầu ra. Chúng tôi sẽ sử dụng lệnh gọi tương tự như trước đây, nhưng lần này, chuyển đầu ra qua jq và hướng dẫn nó phân tích cú pháp và in dữ liệu JSON.

curl -s -A “ví dụ về máy quét reddit” https://www.reddit.com/r/MildlyInteresting.json | jq.

Lưu ý khoảng thời gian theo sau lệnh. Biểu thức này chỉ cần phân tích cú pháp đầu vào và in ra nguyên trạng. Đầu ra trông được định dạng và mã màu độc đáo:

Hãy cùng kiểm tra cấu trúc của dữ liệu JSON mà chúng tôi lấy lại từ Reddit. Kết quả gốc là một đối tượng chứa hai thuộc tính: loại và dữ liệu. Cái sau giữ một tài sản được gọi là bọn trẻ , bao gồm một loạt các bài đăng tới subreddit này.

Mỗi mục trong mảng là một đối tượng cũng chứa hai trường được gọi là loại và dữ liệu. Các thuộc tính chúng ta muốn lấy nằm trong đối tượng dữ liệu. jq mong đợi một biểu thức có thể được áp dụng cho dữ liệu đầu vào và tạo ra đầu ra mong muốn. Nó phải mô tả các nội dung về hệ thống phân cấp và tư cách thành viên của chúng đối với một mảng, cũng như cách dữ liệu sẽ được chuyển đổi. Hãy chạy lại toàn bộ lệnh với biểu thức đúng:

curl -s -A “ví dụ về máy quét reddit” https://www.reddit.com/r/MildlyInteresting.json | jq ‘.data.children | . [] | .data.title, .data.url, .data.permalink '

Đầu ra hiển thị Tiêu đề, URL và Liên kết cố định trên mỗi dòng riêng của chúng:

Hãy đi sâu vào jq lệnh mà chúng tôi đã gọi:

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

Có ba biểu thức trong lệnh này được phân tách bằng hai ký hiệu ống. Kết quả của mỗi biểu thức được chuyển cho người tiếp theo để đánh giá thêm. Biểu thức đầu tiên lọc ra mọi thứ ngoại trừ mảng danh sách Reddit. Đầu ra này được đưa vào biểu thức thứ hai và buộc vào một mảng. Biểu thức thứ ba tác động lên mỗi phần tử trong mảng và trích xuất ba thuộc tính. Thông tin thêm về jq và cú pháp biểu thức của nó có thể được tìm thấy trong hướng dẫn chính thức của jq .

Tập hợp tất cả lại trong một kịch bản

Hãy đặt lệnh gọi API và xử lý hậu kỳ JSON cùng nhau trong một tập lệnh sẽ tạo một tệp có các bài đăng mà chúng ta muốn. Chúng tôi sẽ thêm hỗ trợ tìm nạp bài đăng từ bất kỳ subreddit nào, không chỉ / r / MildlyInteresting.

Mở trình chỉnh sửa của bạn và sao chép nội dung của đoạn mã này vào một tệp có tên là scrape-reddit.sh

#! / bin / bash

nếu [ -z "$1" ]
  sau đó
    echo "Vui lòng chỉ định subreddit"
    lối ra 1
fi

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

curl -s -A "bash-scrape-themes" https://www.reddit.com/r/${SUBREDDIT}.json | \
        jq '.data.children | . [] | .data.title, .data.url, .data.permalink '| \
        trong khi đọc -r TITLE; làm
                URL read -r
                read -r PERMALINK
                echo -e "$ {TITLE} \ t $ {URL} \ t $ {PERMALINK}" | tr --delete \ ">> $ {OUTPUT_FILE}
        làm xong

Tập lệnh này trước tiên sẽ kiểm tra xem người dùng đã cung cấp tên subreddit chưa. Nếu không, nó sẽ thoát với một thông báo lỗi và một mã trả về khác 0.

Tiếp theo, nó sẽ lưu trữ đối số đầu tiên dưới dạng tên subreddit và tạo một tên tệp được đóng dấu ngày tháng, nơi đầu ra sẽ được lưu.

Hành động bắt đầu khi Xoăn được gọi với tiêu đề tùy chỉnh và URL của subreddit để cạo. Đầu ra được chuyển đến jq nơi nó được phân tích cú pháp và rút gọn thành ba trường: Tiêu đề, URL và Liên kết cố định. Các dòng này được đọc từng dòng một và được lưu vào một biến bằng lệnh read, tất cả đều nằm trong vòng lặp while, sẽ tiếp tục cho đến khi không còn dòng nào để đọc. Dòng cuối cùng của khối while bên trong lặp lại ba trường, được phân tách bằng ký tự tab, sau đó chuyển nó qua tr để có thể loại bỏ dấu ngoặc kép. Đầu ra sau đó được nối vào một tệp.

Trước khi có thể thực thi tập lệnh này, chúng tôi phải đảm bảo rằng nó đã được cấp quyền thực thi. Sử dụng chmod lệnh để áp dụng các quyền này cho tệp:

chmod u + x scrape-reddit.sh

Và cuối cùng, thực thi tập lệnh với tên subreddit:

./scrape-reddit.sh MildlyInteresting

Một tệp đầu ra được tạo cùng một thư mục và nội dung của nó sẽ trông giống như sau:

Mỗi dòng chứa ba trường chúng ta đang theo dõi, được phân tách bằng ký tự tab.

Đi xa hơn

Reddit là một mỏ vàng của nội dung và phương tiện thú vị và tất cả đều có thể dễ dàng truy cập bằng cách sử dụng JSON API của nó. Bây giờ bạn có cách để truy cập dữ liệu này và xử lý kết quả, bạn có thể làm những việc như:

  • Lấy các tiêu đề mới nhất từ ​​/ r / WorldNews và gửi chúng đến máy tính để bàn của bạn bằng thông báo-gửi
  • Tích hợp những câu chuyện cười hay nhất từ ​​/ r / DadJokes vào Message-Of-The-Day của hệ thống của bạn
  • Nhận bức ảnh đẹp nhất của ngày hôm nay từ / r / aww và đặt nó làm nền cho màn hình của bạn

Tất cả điều này có thể thực hiện được bằng cách sử dụng dữ liệu được cung cấp và các công cụ bạn có trên hệ thống của mình. Chúc bạn hack vui vẻ!

Using Scrapy On Reddit.com


Đám mây và Internet - Các bài báo phổ biến nhất

Cách tắt các phản hồi được đề xuất của Cortana trong Skype

Đám mây và Internet Nov 13, 2024

NỘI DUNG KHÔNG ĐƯỢC CHỨNG MINH Các phiên bản mới nhất của Skype bao gồm các phản hồi được đề xuất từ ​​Cortana. Đây là những câu tr�..


Cách nhận thông báo giá Steam tốt hơn

Đám mây và Internet Oct 20, 2025

NỘI DUNG KHÔNG ĐƯỢC CHỨNG MINH Tính năng danh sách mong muốn của Steam rất hữu ích, nhưng không phải lúc nào nó cũng hữu ích. Nếu bạn đang ch�..


Pluto.TV đưa kênh lướt sóng đến máy cắt dây — miễn phí

Đám mây và Internet Jan 26, 2025

Năm trăm giờ video được tải lên YouTube mỗi phút, vì vậy bạn sẽ không bao giờ có thể xem mọi thứ theo đúng nghĩa đen. Thách thức thực sự l�..


Cách thêm chỉ báo để xem bạn đang sử dụng màn hình ảo nào trong Windows 10

Đám mây và Internet May 17, 2025

NỘI DUNG KHÔNG ĐƯỢC CHỨNG MINH Khả năng có nhiều máy tính để bàn đã bị thiếu trong một thời gian dài trong Windows, cho đến khi Windows 10 cuố..


Cách sử dụng ứng dụng Ghi chú mới của Apple để sắp xếp suy nghĩ của bạn

Đám mây và Internet Mar 30, 2025

Ghi chép có thể tạo ra sự khác biệt giữa việc ghi nhớ ý tưởng tuyệt vời mà bạn nảy ra khi tắm và để nó trôi xuống cống. Ứng dụng Notes ..


Cách thiết lập lời nhắc sinh nhật cho bạn bè trên Facebook của bạn trong Lịch Google

Đám mây và Internet Feb 28, 2025

NỘI DUNG KHÔNG ĐƯỢC CHỨNG MINH Nếu bạn muốn cập nhật sinh nhật của tất cả bạn bè trên Facebook nhưng không muốn kiểm tra Facebook mọi lúc, ..


Luôn hiển thị thanh Menu & Thanh công cụ khác trong Internet Explorer 9 Beta

Đám mây và Internet Sep 23, 2025

NỘI DUNG KHÔNG ĐƯỢC CHỨNG MINH Kể từ khi IE 9 beta được phát hành cho công chúng, đã có rất nhiều cuộc thảo luận về việc nó cảm thấy kỳ lạ khi..


Truy cập các Trang đặc biệt của Google Chrome một cách dễ dàng

Đám mây và Internet Dec 29, 2024

Bạn có muốn một cách nhanh hơn để truy cập các trang đặc biệt của Chrome (thay vì sử dụng menu hoặc nhập các URL đặc biệt) không? Giờ đây, bạn có ..


Thể loại