【问题标题】:How to build a webscraping function for subreddit?如何为 subreddit 构建网页抓取功能?
【发布时间】:2020-01-27 23:29:45
【问题描述】:

总结:我想从网络上抓取 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 webscrape (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})

我的问题是我的第一个参数不需要'before'。但是在创建“帖子”之后,我需要使用“之前”,以便我从上一个操作中获取早于最后一个帖子的所有帖子。如何调和这种冲突?

非常感谢!

【问题讨论】:

    标签: python function web-scraping


    【解决方案1】:

    您要求的是可行的,但我认为 f-strings 在这里不起作用。下面的代码将每个数据帧附加到数据帧字典。试试看它是否有效:

    d = {}
    url = 'https://api.pushshift.io/reddit/search/submission'
    def webscraper (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)
    

    【讨论】:

    • 天哪。 'if i==1: and else' 是天才。我是编码新手。通过你的回答,我学到了一些新东西!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2020-06-13
    相关资源
    最近更新 更多