Бот PRAW анализирует только один subreddit, когда хочет разобрать несколько - PullRequest
0 голосов
/ 13 мая 2019

Я пишу бота, который анализирует определенные subreddits для заголовков сообщений, которые содержат определенные символы. Как вы можете видеть ниже, в методе r.subreddit() я передал 'nba', но также хочу, чтобы бот анализировал 'nbadiscussion', 'warriors' и 'NYKnicks'.

Как получается, что он захватывает только топ-сообщения из /r/nba? Спасибо!

def run_bot():
    sub = r.subreddit('nba+nbadiscussion+warriors+NYKnicks')
    print("Grabbing subreddit")
    subs = sub.top('year', limit=5)
    print("Grabbing posts in sub")
    for posts in subs:
        article_url = posts.url
        post_title = posts.title
        print(post_title)
        print(article_url)

        string1 = post_title
        durantRegex = re.compile(r'[KevinDurantKnicks]')
        x = durantRegex.search("Kevin Durant Knicks", string1)  

 run_bot()

Ответы [ 3 ]

2 голосов
/ 14 мая 2019

Если вы хотите, чтобы 5 результатов по каждому сабвуферу лучше использовать цикл for для списка сабвуферов.

subs_to_search = ['nba', 'nbadiscussion', 'warriors', 'NYKnicks']

for sub_name in subs_to_search:
    sub = r.subreddit(sub_name)
    subs = sub.top('year', limit=5)

    for posts in subs:
        article_url = posts.url
        post_title = posts.title
        print(post_title)
        print(article_url)

И так далее, поэтому вы выполняете действие для каждого сабвуфера.,Он будет получать по 5 от каждого, делать то, что вам нужно, затем переходить к следующему вспомогательному пункту Надежда, который помогает.

0 голосов
/ 16 мая 2019

Как получается, что он захватывает только топ-сообщения от r / nba?

Из-за относительной популярности каждого из этих подредактов.

Если мы посмотрим на веб-версию запроса, который вы делаете, это станет очевидным:

https://reddit.com/r/nba+nbadiscussion+warriors+NYKnicks/top?t=year

/ r / nba значительно более популярны, чем другие субредиты, поэтомуего главные посты (отсортированные по количеству баллов) затмевают посты других субреддитов.Для справки, вот главные посты года для других подразделов:

На момент написания данного поста пост, набравший наибольшее количество баллов в любом из этих подразделов, составлял этот от / р / воинов, с 5171 очками.Это далеко от 63 тыс. Пунктов, которые имеет верхний пост в / r / nba .


Ари Виктор предлагает хороший способ получения сообщений от каждого сабвуфера;а именно, перебирая список подписчиков и индивидуально получая их главные сообщения.

Обратите внимание, что описанное выше поведение не происходит с горячими списками.С помощью горячих списков вы можете рассчитывать на равномерное распределение всех задействованных субреддитов, поскольку баллы по результатам взвешиваются по размеру сообщества.Итак, еще одно возможное решение заключается в следующем:

def run_bot():
    print("Grabbing subreddit")
    subs = r.subreddit('nba+nbadiscussion+warriors+NYKnicks')
    print("Grabbing posts in sub")
    for posts in subs.hot(limit=5):
        article_url = posts.url
        post_title = posts.title
        print(post_title)
        print(article_url)

run_bot()

Обратите внимание, что это решение получает горячие сообщения, а не топ-сообщения.Хотите ли вы горячие или топ-сообщения, зависит от вашего конкретного приложения.

0 голосов
/ 14 мая 2019

Это потому, что limit=5, который вы указали в subs = sub.top('year', limit=5), ограничивает ваш набор результатов из объединенных субредиторов всего пятью результатами.

Попробуйте увеличить параметр limit или полностью удалить его, чтобы увидеть результаты и других подредактов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...