Как построить webscraping функцию для subreddit? - PullRequest
1 голос
/ 28 января 2020

Сводка: я хочу перезаписать subreddit, а затем превратить данные в фреймы данных. Я знаю, как сделать их индивидуально. Но я застрял с использованием функции. Вот как я делаю это один за другим.

url = 'https://api.pushshift.io/reddit/search/submission'

params3 = {'subreddit':'Apple', 'size': 500,'before':1579411194}
res3 = requests.get(url, params3)
data = res3.json()
post3 = data['data']
apdf3 = pd.DataFrame(post3)

Вот функция, которую я до сих пор придумал:

url = 'https://api.pushshift.io/reddit/search/submission'
def webscrap (subreddit, size,):
    for i in range(1, 11):
        params = {"subreddit":subreddit, 'size':size, 'before': f'post{i}'[-1]['created_utc']}
        res = requests.get(url, params)
        f'data{i}' = res.json()
        f'post{i}' = data[f'data{i}']
        f'ap_df{i}' = pd.DataFrame(f'post{i})

Моя проблема в том, что мой первый параметр не нуждается в «до». Но после того, как «пост» создан, мне нужно использовать «до», чтобы получить все посты, которые предшествуют последнему посту из предыдущего действия. Как мне разрешить этот конфликт?

Большое спасибо!

1 Ответ

0 голосов
/ 28 января 2020

То, что вы просите, выполнимо, но я не думаю, что здесь будут работать f-струны. Код ниже прикрепляет каждый фрейм данных к словарю фреймов данных. Попробуйте и посмотрите, работает ли он:

d = {}
url = 'https://api.pushshift.io/reddit/search/submission'
def webscrap (subreddit, size,):
    bef = 0 
    for i in range(1, 11):
        if i==1:
            params = {"subreddit":subreddit, 'size':size}
        else:
            params = {"subreddit":subreddit, 'size':size, 'before': bef}
        res = requests.get(url, params)    
        data = res.json()  
        dat = data['data']
        bef = dat[-1]['created_utc']
        df_name = subreddit+str(i)
        d[df_name] = pd.DataFrame(dat)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...