@gonchar0ff

Как сгенерировать ссылки в Python для парсинга всех страниц?

Добрый день!
Подскажите по такому вопросу, не так давно начал изучать Python (3.7), хочу написать простой парсер страниц футбольных матчей, генерирую ссылку следующим образом:

def main():
	pattern = 'https://www.betexplorer.com/results/soccer/?year=2016&month=1&day={}'

	for days in range(1, 32):
		url = pattern.format(str(days))
		print(url)


Все работает, получаю на выходе строки, где {} заменяются на данные из range, то есть от 1 до 31 (это числа Января 2016 года). Но необходимо, что бы не писать все в ручную так же подменять значения month= и year=, то есть я понимаю, что нужно изменить pattern:

pattern = 'https://www.betexplorer.com/results/soccer/?year={}&month={}&day={}'


Но как сгенерировать для этих паттернов свои данные? Например year до 2016-2019, month=1-12, day=1-31. И как проверить, существует ли вообще этот день, и в случае если нет - что бы его пропустить. Ведь 30 февраля например нет, и, на сколько я понимаю, скрипт просто вылетит с ошибкой?
  • Вопрос задан
  • 66 просмотров
Решения вопроса 2
kshnkvn
@kshnkvn Куратор тега Python
t.me/kshnkvn
pattern = "https://www.betexplorer.com/results/soccer/?year={}&month={}&day={}"

for year in range(2016, 2020):
    for month in range(1, 13):
        for day in range(1, 32):
            url = pattern.format(year, month, day)
            print(url)


С проверкой сильно не заморачивайтесь, сайт возвращает 404 статус, если страницы нет, на это и делайте проверку. Примерно так:

r = requests.get(url)
if r.status_code == 404:
    print("This page does not exists")
Ответ написан
adugin
@adugin Куратор тега Python
Просто для расширения знаний стандартной библиотеки:
from calendar import Calendar
from itertools import product

cal = Calendar()
url = 'https://www.betexplorer.com/results/soccer/?year={}&month={}&day={}'

with open('dump.txt', 'wt') as file:
    for year, month in product(range(2016, 2020), range(1, 13)):
        for day in filter(None, cal.itermonthdays(year, month)):
            print(url.format(year, month, day), file=file)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы