#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:
Это будет продолжаться, пока вы не дойдете до конца.