Я могу очистить две страницы reddit в Интернете до определенного момента, затем я получаю сообщение об ошибке и не понимаю, почему

#python #web-scraping #nlp

#python #веб-очистка #nlp

Вопрос:

Я пытаюсь провести некоторое NLP на страницах subreddit. У меня есть фрагмент кода, который собирает кучу данных на двух веб-страницах. Он очищает данные, пока я не доберусь до диапазона (40). Это было бы прекрасно, за исключением того, что я знаю, что выбранные мной субредакты содержат больше сообщений, чем позволяет мне мой код. очистить.

Кто-нибудь может выяснить, что здесь происходит?

 posts_test = []
url = 'https://www.reddit.com/r/TheOnion/.json?after='
for i in range(40):
    res = requests.get(url, headers={'User-agent': 'Maithili'})
    the_onion = res.json()
    for i in range(25):
        post_t = []
        post_t.append(the_onion['data']['children'][i]['data']['title'])
        post_t.append(the_onion['data']['children'][i]['data']['subreddit'])
        posts_test.append(post_t)
    after = the_onion['data']['after']
    url = 'https://www.reddit.com/r/TheOnion/.json?after='   after

    time.sleep(3)

# Not the onion
url = 'https://www.reddit.com/r/nottheonion/.json?after='

for i in range(40):
    res3 = requests.get(url, headers=headers2)
    not_onion_json = res2.json()
    for i in range(25):
        post_t = []
        post_t.append(not_onion_json['data']['children'][i]['data']['title'])
        post_t.append(not_onion_json['data']['children'][i]['data']['subreddit'])
        posts_test.append(post_t)
    after = not_onion_json['data']['after']
    url = "https://www.reddit.com/r/nottheonion/.json?after="   after

    time.sleep(3)


---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-57-6c1cfdd42421> in <module>
      7     for i in range(25):
      8         post_t = []
----> 9         post_t.append(the_onion['data']['children'][i]['data']['title'])
     10         post_t.append(the_onion['data']['children'][i]['data']['subreddit'])
     11         posts_test.append(post_t)

IndexError: list index out of range"```
  

Комментарии:

1. Почему вы используете жестко закодированный номер? Разве not_onion_json [‘data’] [‘children’] не имеет свойства length (или аналогичного), которое вы могли бы использовать вместо этого?

Ответ №1:

Причина, по которой вы останавливаетесь на 40, заключается в том, что вы говорите python остановиться на 40

 for i in range(40):
  

Хорошая новость в том, что вы собираете следующую страницу здесь

 after = not_onion_json['data']['after']
  

Исходя из предположения, что, как только вы дойдете до конца страниц after == null , я бы предложил выполнить цикл while. Что-то вроде

 while after != None:
  

Это будет продолжаться, пока вы не дойдете до конца.