Не могу прописать пагинацию в парсер Python
Вот код, не обессудьте первый день этим занимаюсь. Пагинацию не понимаю как прописать, все примеры через pages, а тут просто даты. https://primatips.com/tips/2022-11-23
import requests
from bs4 import BeautifulSoup
import csv
HOST = 'https://primatips.com'
URL = 'https://primatips.com/tips/'
CSV = 'games.csv'
HEADERS = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9'
}
def get_html(url, params=()):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('a', class_='game')
games = []
for item in items:
games.append(
{
'champ':item.find('span', class_= 'cn').get_text(),
'team':item.find('span', class_= 'nms').get_text(';'),
'coef':item.find('span', class_= 'os').get_text(';'),
'goal':item.find('span', class_= 'res').get_text(';'),
}
)
return games
def save_doc(items, path):
with open(path, 'a', newline='') as file:
writer = csv.writer(file, delimiter=';')
writer.writerow(['1','2','3','4'])
for item in items:
writer.writerow( [item ['champ'],item ['team'],item ['coef'],item ['goal']])
def parse():
while True:
URL = input('SSSS')
URL = URL.strip()
html = get_html(URL)
if html.status_code == 200:
games = []
games = get_content(html.text)
save_doc(games, CSV)
else:
print('ERROR')
parse()
Ответы (1 шт):
Автор решения: Mikhail Sibirev
→ Ссылка
Каждая страница у вас соответствует дате. В URL страницы есть "базовая" часть, и окончание, соответствующее дате. Вам нужно за некоторый период дат распарсить страницы. Соответсвенно, организуем цикл, в котором к "базовой" части URL будем добавлять строку-окончание с нужной датой в требуемом формате. Ниже простой пример, вам нужно запустить его в консоли, понять, что он делает, адаптировать к вашему коду:
from datetime import date, datetime, timedelta
current_date = date(2022, 11, 1)
base_url = "http://example.com/"
for i in range(0, 10): # берём за 10 дней
URL = base_url + datetime.strftime(current_date, "%Y-%m-%d")
print(URL)
current_date = current_date + timedelta(days=1)