如何使用 python 将抓取 reddit 数据的进度保存为数据库文件

How to save progress from scraping reddit data as database file using python

我写了一个脚本来从 reddit 获取一些帖子。

import praw
import pandas as pd
reddit = praw.Reddit(client_id='*******', \
                     client_secret='*******', \
                     user_agent='**********', \
                     username='********', \
                     password='*******8')
subreddit1 = reddit.subreddit("Tea")
subreddit2 = reddit.subreddit("Biophysics")
top_subreddit1 = subreddit1.top(limit=500)
top_subreddit2 = subreddit2.top(limit=500)
topics_dict = { "title":[],
                "score":[],
                "id":[], "url":[], 
                "comms_num": [],
                "created": [],
                "body":[]}
for submission1 in top_subreddit1:
    topics_dict["title"].append(submission1.title)
    topics_dict["score"].append(submission1.score)
    topics_dict["id"].append(submission1.id)
    topics_dict["url"].append(submission1.url)
    topics_dict["comms_num"].append(submission1.num_comments)
    topics_dict["created"].append(submission1.created)
    topics_dict["body"].append(submission1.selftext)
for submission2 in top_subreddit2:
    topics_dict["title"].append(submission2.title)
    topics_dict["score"].append(submission2.score)
    topics_dict["id"].append(submission2.id)
    topics_dict["url"].append(submission2.url)
    topics_dict["comms_num"].append(submission2.num_comments)
    topics_dict["created"].append(submission2.created)
    topics_dict["body"].append(submission2.selftext)
topics_data = pd.DataFrame(topics_dict)
topics_data

但它只显示在我的 jupyter 中。 现在我想将进度保存为数据库文件。感谢所有建议。

你有几个选择。我将介绍两个,每个都有其优缺点:

1. CSV

只需使用 DataFrame.to_csv:

将文件保存为 .csv
topics_data.to_csv('path_to_file.csv')

然后您可以继续在您的客户端应用程序中解析此 csv 文件,即任何应用程序将使用您抓取的数据。

优点

  • 简单保存
  • 非常准系统;进一步处理会很简单

缺点

  • 非常准系统;如果你需要任何类型的结构,你将没有任何灵活性

2。 SQLITE

您还可以选择使用 DataFrame.to_sql:

将数据框存储在 sqlite 中
import sqlite3

db_file = 'my.db'
# This creates a new database file if it doesn't exist
db_conn = sqlite3.connect(db_file)
# This creates a new table 'topics_data' if it doesn't exist
topics_data.to_sql('topics_data', con=db_conn)

优点

  • 可能更容易为您的客户解析
  • SQL是一种非常强大的查询语言。你可以利用这个

缺点

  • 如果您只需要基本的数据传输,就太过分了

在此处了解有关 sqlite 的更多信息:sqlite tutorial

要在本地保存数据供内部 python 稍后使用,您可以使用 built in pickle

import pickle

def save_obj(obj, name ):
    with open(f'{name}.pkl', 'wb') as f:
        pickle.dump(obj, f, pickle.HIGHEST_PROTOCOL)

def load_obj(name):
  try:
    with open(f'{name}.pkl', 'rb') as f:
        return pickle.load(f)
    print("")
    print(f"loaded {name}")
    print("")
  except Exception as e:
    print("")
    print(f"Error loading object '{name}': {e}")
    print("")