Всем привет. Изучаю написание парсеров на python. Для практики начала писать парсер для сбора данных с главной страницы википедии
https://ru.wikipedia.org/wiki/Заглавная_страница
Несколько дней парсер работал, но сегодня работать перестал, появляется такой ответ:
...
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='ru.wikipedia.org', port=443): Max retries exceeded with url: /wiki/%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0 (Caused by ConnectTimeoutError(, 'Connection to ru.wikipedia.org timed out. (connect timeout=None)'))
Скрин фрагмента:
Скриншот фрагмента кода удалён модератором.
В интернете внятного объяснения причин и решения найти не смог. Если здесь есть люди, сталкивавшиеся с такой проблемой, хотелось бы узнать, из за чего такое возникает и как можно исправить?
Код моего парсера:
from pydoc import classname
from unittest.main import main
import requests
from bs4 import BeautifulSoup
# Парсер главной страницы википедии
# https://ru.wikipedia.org/wiki/Заглавная_страница
# Отправка запроса для получения html кода главной страницы
def get_html(url):
print('get_html start')
resp = requests.get(url)
return resp.text
# Поиск всех видимых на главной станице абзацев статей
def get_all_paragraphs(get_article_text):
all_paragraphs_text = ''
for p in get_article_text:
all_paragraphs_text = all_paragraphs_text + '\n' + p.text
return all_paragraphs_text
# Извлечения колличества статей из найденной строки
def get_number_of_aricles(line_with_number):
return line_with_number.split(' ')[1]
# Создание экземпляра класса, содержащего данные из полученного html кода страницы, и поиск нужных элементов
def get_data(html):
print('get_data start')
soup_of_html = BeautifulSoup(html, 'lxml')
selected_article = soup_of_html.find('div', id='main-tfa').find('div').text
print(selected_article)
selected_article_title = soup_of_html.find('div', id='main-tfa').find('h2').find('span', class_='mw-headline').find('a').text
print(selected_article_title)
get_selected_article_text = soup_of_html.find('div', id='main-tfa').find_all('p')
print(get_all_paragraphs(get_selected_article_text))
number_of_selected_articles = soup_of_html.find('div', id='main-tfa').find('span', class_='mw-ui-button mw-ui-quiet').text
print(get_number_of_aricles(number_of_selected_articles))
print('------------------------------')
good_article = soup_of_html.find('div', id='main-tga').find('div').text
print(good_article)
good_article_title = soup_of_html.find('div', id='main-tga').find('h2').find('span', class_='mw-headline').find('a').text
print(good_article_title)
get_good_article_text = soup_of_html.find('div', id='main-tga').find_all('p')
print(get_all_paragraphs(get_good_article_text))
number_of_good_articles = soup_of_html.find('div', id='main-tga').find('span', class_='mw-ui-button mw-ui-quiet').text
print(get_number_of_aricles(number_of_good_articles))
print('------------------------------')
last_favorites_list_title = soup_of_html.find('div', id='main-tfl').find_all('span')[0].text
print(last_favorites_list_title)
last_favorites_list = soup_of_html.find('div', id='main-tfl').find_all('h2')[0].text.lstrip()
print(last_favorites_list)
previous_favorites_list_title = soup_of_html.find('div', id='main-tfl').find_all('span')[1].text
print(previous_favorites_list_title)
previous_favorites_list = soup_of_html.find('div', id='main-tfl').find_all('h2')[1].text.lstrip()
print(previous_favorites_list)
print('------------------------------')
image_of_day_title = soup_of_html.find('div', id='main-potd').find('span', id='Изображение_дня').text
print(image_of_day_title)
image_of_day_alt = soup_of_html.find('div', id='main-potd').find('img').get('alt')
print(image_of_day_alt)
image_of_day_src = soup_of_html.find('div', id='main-potd').find('img').get('src')
print(image_of_day_src)
print('------------------------------')
from_new_materials_title = soup_of_html.find('div', id='main-dyk').find('div').text
print(from_new_materials_title)
do_you_know_title = soup_of_html.find('div', id='main-dyk').find('span', id='Знаете_ли_вы?').text
print(do_you_know_title)
do_you_know_list = soup_of_html.find('div', id='main-dyk').find_all('ul') #[0].text
all_list = ''
for l in do_you_know_list:
all_list = all_list + l.text + '\n'
all_list = all_list.replace('Обсудить', '').replace('Предложения', '').replace('Архив', '').replace('Просмотр шаблона', '').rstrip()
print(all_list)
print('------------------------------')
return selected_article
# Основная функция, отправляющая запрос и разбирающая полученные данные из html кода
def main():
print('main start')
url = 'https://ru.wikipedia.org/wiki/Заглавная_страница'
get_data(get_html(url))
# Проверка значения __name__ при запуске исходного файла как основной программы и запуск функции main() в случае True
if __name__ == '__main__':
main()