Answer the question
In order to leave comments, you need to log in
How can I count the elements of a table row by row?
I'm writing a parser for a schedule site and I'm having a problem with the fact that the date and subject elements are in the same div but have different classes. I need to create a dictionary where the key will contain the date and the value will contain information about the subject.
Now all I can do is display the schedule and date separately using the bs4 library with the find_all() function.
Tell me how you can combine these two functions for subsequent entry into the dictionary?
This is how the HTML page looks like:
import requests
from bs4 import BeautifulSoup
import re
dir = {}
def get_html(url):
r = requests.get(url)
return r.text
def get_data(html):
soup = BeautifulSoup(html, 'lxml')
schule = soup.find('div', class_='shedule_list margin_bottom_xx').find('table', class_='align_top schedule')
rasp = schule.find_all('tr', class_='schedule-date') # Дата
rasptime = schule.find_all('tr', class_='schedule-time') # Предмет
for d in rasp:
newdata = d.find('span', class_='date t_small_x t_gray_light').text
print(newdata)
for i in rasptime:
sd = i.find_all('td')
ChangePairs = re.search('дата изменения: (.*)', sd[5].text)
print(ChangePairs[1])
def main():
url = "http://www.asu.ru/timetable/students/32/2129436778/"
print(get_data(get_html(url)))
if __name__ == '__main__':
main()
Answer the question
In order to leave comments, you need to log in
import re
import pprint
import requests
import lxml.html
URL = 'http://www.asu.ru/timetable/students/32/2129436778/'
pp = pprint.PrettyPrinter(indent=4)
res = requests.get(URL)
root = lxml.html.fromstring(res.text)
table = list()
elems = root.xpath('.//tr[@class="schedule-date"]|.//tr[@class="schedule-time"]')
curr_date = ''
for el in elems:
if el.get('class') == 'schedule-date':
curr_date = el.xpath('.//span[1]')[0].text
if el.get('class') == 'schedule-time':
out = re.sub(' +', ' ', ''.join(el.itertext()))
out = re.sub('^\s+', '', out)
out = re.sub('\n+', '', out)
table.append({'date': curr_date, 'info': out})
pp.pprint(table)
[ { 'date': 'Понедельник',
'info': '4 13:20 - 14:50 лек. Физические методы исследования '
'проф. Смагин В.П. 500\xa0К дата изменения: 08.04.2019 '
'11:21 свободные аудитории '},
{ 'date': 'Понедельник',
'info': '2 09:40 - 11:10 а) лаб. Новые информационные '
'технологии преп. Кушнир Е.Ю. 417\xa0К дата '
'изменения: 24.04.2019 11:16 свободные аудитории '},
{ 'date': 'Понедельник',
'info': '3 11:20 - 12:50 пр.з. Социология доц. Артюхина '
'В.А. 311а\xa0К дата изменения: 24.04.2019 11:13 '
'свободные аудитории '},
{ 'date': 'Вторник',
'info': '3 11:20 - 12:50 пр.з. Социология доц. Артюхина '
'В.А. 311а\xa0К дата изменения: 24.04.2019 11:13 '
'свободные аудитории '},
{ 'date': 'Вторник',
'info': '1 08:00 - 09:30 пр.з. Педагогика доц. Зацепина '
'О.В. 311а\xa0К дата изменения: 24.04.2019 11:11 '
'свободные аудитории '},
{ 'date': 'Вторник',
'info': '2 09:40 - 11:10 пр.з. Педагогика доц. Зацепина '
'О.В. 311а\xa0К дата изменения: 24.04.2019 11:07 '
'свободные аудитории '},
{ 'date': 'Вторник',
'info': '3 11:20 - 12:50 пр.з. Кристаллохимия доц. Стручева '
'Н.Е. 106а\xa0К дата изменения: 24.04.2019 11:06 '
'свободные аудитории '},
{ 'date': 'Среда',
'info': '3 11:20 - 12:50 пр.з. Кристаллохимия доц. Стручева '
'Н.Е. 106а\xa0К дата изменения: 24.04.2019 11:06 '
'свободные аудитории '},
{ 'date': 'Среда',
'info': '3 11:20 - 12:50 а) лаб. Новые информационные '
'технологии преп. Кушнир Е.Ю. 419\xa0К дата '
'изменения: 08.04.2019 11:21 свободные аудитории '},
{ 'date': 'Среда',
'info': 'б) лаб. Новые информационные технологии доц. Геньш К.В. '
'417\xa0К дата изменения: 08.04.2019 11:21 свободные '
'аудитории '},
{ 'date': 'Среда',
'info': '4 13:20 - 14:50 б) лаб. Новые информационные '
'технологии доц. Геньш К.В. 417\xa0К дата '
'изменения: 24.04.2019 11:18 свободные аудитории '},
{ 'date': 'Четверг',
'info': '4 13:20 - 14:50 б) лаб. Новые информационные '
'технологии доц. Геньш К.В. 417\xa0К дата '
'изменения: 24.04.2019 11:18 свободные аудитории '},
{ 'date': 'Четверг',
'info': '2 09:40 - 11:10 а) пр.з. Аналитическая химия доц. '
'Лейтес Е.А. 500\xa0К дата изменения: 29.04.2019 '
'10:56 свободные аудитории '},
{ 'date': 'Четверг',
'info': '3 11:20 - 12:50 пр.з. Физические методы исследования '
'проф. Смагин В.П. 521\xa0К дата изменения: 24.04.2019 '
'11:15 свободные аудитории '},
{ 'date': 'Четверг',
'info': '4 13:20 - 14:50 б) пр.з. Аналитическая химия проф. '
'Смагин В.П. 508\xa0К дата изменения: 29.04.2019 '
'10:55 свободные аудитории '},
{ 'date': 'Пятница',
'info': '4 13:20 - 14:50 б) пр.з. Аналитическая химия проф. '
'Смагин В.П. 508\xa0К дата изменения: 29.04.2019 '
'10:55 свободные аудитории '},
{ 'date': 'Пятница',
'info': '1 08:00 - 09:30 а) лаб. Аналитическая химия доц. '
'Лейтес Е.А. 509\xa0К дата изменения: 29.04.2019 '
'10:55 свободные аудитории '},
{ 'date': 'Пятница',
'info': 'б) лаб. Аналитическая химия проф. Смагин В.П. 508\xa0'
'К дата изменения: 29.04.2019 10:55 свободные '
'аудитории '},
{ 'date': 'Пятница',
'info': '2 09:40 - 11:10 а) лаб. Аналитическая химия доц. '
'Лейтес Е.А. 509\xa0К дата изменения: 29.04.2019 '
'10:54 свободные аудитории '},
{ 'date': 'Пятница',
'info': 'б) лаб. Аналитическая химия проф. Смагин В.П. 508\xa0'
'К дата изменения: 29.04.2019 10:53 свободные '
'аудитории '},
{ 'date': 'Пятница',
'info': '3 11:20 - 12:50 а) лаб. Аналитическая химия доц. '
'Лейтес Е.А. 509\xa0К дата изменения: 29.04.2019 '
'10:53 свободные аудитории '},
{ 'date': 'Пятница',
'info': 'б) лаб. Аналитическая химия проф. Смагин В.П. 508\xa0'
'К дата изменения: 29.04.2019 10:52 свободные '
'аудитории '},
{ 'date': 'Пятница',
'info': '4 13:20 - 14:50 лек. Физические методы исследования '
'проф. Смагин В.П. 500\xa0К дата изменения: 08.04.2019 '
'11:21 свободные аудитории '}]
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question