Khai Dân Trí
  • Home
  • Sức khỏe
    • All
    • Các bệnh

    Tất cả về liều lượng của Femara

    Tổng quan về co giật gelastic

    Những điều cần biết về căng thẳng và lạc nội mạc tử cung

    Khi nào cần thực hiện hô hấp nhân tạo khi bị đau tim

    • Các bệnh
  • Công nghệ
    • Điện thoại & Máy tính
  • Bách khoa toàn thư
No Result
View All Result
  • Home
  • Sức khỏe
    • All
    • Các bệnh

    Tất cả về liều lượng của Femara

    Tổng quan về co giật gelastic

    Những điều cần biết về căng thẳng và lạc nội mạc tử cung

    Khi nào cần thực hiện hô hấp nhân tạo khi bị đau tim

    • Các bệnh
  • Công nghệ
    • Điện thoại & Máy tính
  • Bách khoa toàn thư
No Result
View All Result
Khai Dân Trí
No Result
View All Result
Home Công nghệ Điện thoại & Máy tính

Cách lấy danh sách các chủ đề từ một Subreddit bằng cách sử dụng Bash

by Trọng Hiếu
12/03/2021
in Điện thoại & Máy tính
0

Fatmawati Achmad Zaenuri / Shutterstock.com

Reddit cung cấp nguồn cấp dữ liệu JSON cho mỗi subreddit. Đâ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 curl để 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 curl để tìm nạp các bài đăng mới nhất từ ​​subreddit MildlyInteresting:

curl -s -A “reddit scraper example” https://www.reddit.com/r/MildlyInteresting.json

Lưu ý cách các tùy chọn được sử dụng 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, -A “reddit scraper example” , đặt mộ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ạo một subreddit từ Bash

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 Tiêu đề, 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ư sed và grep , 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 “reddit scraper example” 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 có vẻ được định dạng độc đáo và được mã hóa màu:

Trích xuất dữ liệu từ JSON của subreddit trong Bash

Hãy kiểm tra cấu trúc của dữ liệu JSON mà chúng ta 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à children, 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ả nội dung dưới dạ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 nên đượ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 “reddit scraper example” 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:

Phân tích cú pháp nội dung của subreddit từ dòng lệnh Linux

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 dẫn. 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 sách hướng dẫn chính thức của jq.

Tập hợp tất cả lại với nhau 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 ra 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

if [ -z "$1" ]
  then
    echo "Please specify a subreddit"
    exit 1
fi

SUBREDDIT=$1
NOW=$(date +"%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' | 
        while read -r TITLE; do
                read -r URL 
                read -r PERMALINK
                echo -e "${TITLE}t${URL}t${PERMALINK}" | tr --delete " >> ${OUTPUT_FILE}
        done

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 thông báo lỗi và 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à xây dựng một tên tệp có dấu ngày tháng, nơi đầu ra sẽ được lưu.

Hành động bắt đầu khi curl được gọi với một 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, hãy 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:

Trích xuất và xem các chủ đề từ một subreddit trong Bash

Mỗi dòng chứa ba trường mà 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 truy cập dễ dàng 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 của bạn bằng cách sử dụ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 hình ảnh đẹp nhất 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ẻ!

Tags: bằngbashCácCáchchủdungĐánhđểlấymộtsáchsựSubreddittử
Trọng Hiếu

Trọng Hiếu

Xem thêm

Điện thoại & Máy tính

Tại sao Windows 11 lại tốt hơn cho PC chơi game hơn Windows 10

28/05/2022
Điện thoại & Máy tính

Hệ thống tệp liên hành tinh (IPFS) là gì và bạn sử dụng nó như thế nào?

28/05/2022
Điện thoại & Máy tính

YouTube TV sẽ sớm có chế độ Ảnh trong Ảnh trên iPhone

28/05/2022
Điện thoại & Máy tính

Cách hợp nhất hai cột trong Microsoft Excel

28/05/2022
Điện thoại & Máy tính

Google sẽ sớm phát hiện ra tiếng ngáy và ho của người dùng Android

28/05/2022
Điện thoại & Máy tính

Cách thay đổi ứng dụng và ngôn ngữ giọng nói trong Google Maps

28/05/2022
Điện thoại & Máy tính

“Chất liệu bạn” của Android 12 sắp xuất hiện trên 5 chiếc điện thoại này

28/05/2022
Điện thoại & Máy tính

Cách ngăn người dùng thay đổi cài đặt proxy trong Windows 11

28/05/2022
Điện thoại & Máy tính

Cách chia sẻ vị trí hiện tại của bạn trên WhatsApp cho Android

28/05/2022

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Bài viết mới

Tại sao Windows 11 lại tốt hơn cho PC chơi game hơn Windows 10

28/05/2022

Tất cả về liều lượng của Femara

28/05/2022

Tổng quan về co giật gelastic

28/05/2022

Những điều cần biết về căng thẳng và lạc nội mạc tử cung

28/05/2022
Khai Dân Trí

Website phổ biến kiến thức, tin tức và bình luận, nhằm nâng cao dân trí.

No Result
View All Result
  • Home
  • Sức khỏe
    • Các bệnh
  • Công nghệ
    • Điện thoại & Máy tính
  • Bách khoa toàn thư

© 2022 JNews - Premium WordPress news & magazine theme by Jegtheme.