Сначала вам нужно будет создать список словарей в нужном вам формате. Я предполагаю, что каждые 4 значения в каждой ячейке должны быть в отдельной записи, поэтому в следующем порядке сначала создается список всех записей. Это возвращается вызывающей стороне, а Python json.dump()
используется для записи списка в output.json
import requests
from bs4 import BeautifulSoup as bs
import json
from operator import itemgetter
from pprint import pprint
fields = ['Item', 'Group number', 'Field 3', 'Field 4']
record = itemgetter(0, 1, 3, 4) # Skip the blank 2nd entry
def get_html(url):
r = requests.get(url)
return r.text
def get_data(html):
soup = bs(html, 'lxml')
trs = soup.find('table', {'style':'padding-top:10px;'})
rows = []
for tr in trs.find_all('tr'):
for td in tr.find_all('td'):
a_tags = td.find_all('a')
if a_tags:
row = {field : value.get_text(strip=True) for field, value in zip(fields, record(a_tags))}
rows.append(row)
return rows
def main():
groups = {
'T-691': 'https://kbp.by/rasp/timetable/view_beta_tbp/?cat=group&id=26',
'Т-717': 'https://kbp.by/rasp/timetable/view_beta_tbp/?cat=group&id=62'
}
group = input()
url = 'https://kbp.by/rasp/timetable/view_beta_tbp/?cat=group&id={}'.format(groups[group])
rows = get_data(get_html(url))
with open('output.json', 'w', encoding='utf-8') as f_output:
json.dump(rows, f_output)
if __name__ == '__main__':
main()
Даю вам output.json
Начинаем:
[
{
"Item": "ТестОтладкаПО",
"Group number": "Якимович К",
"Field 3": "Т-691",
"Field 4": "408"
},
{
"Item": "МатемМоделир",
"Group number": "Клименко Д.Ф.",
"Field 3": "Т-691",
"Field 4": "429"
}
]
Вам нужно будет присвоить правильные имена полей.