W
W
Whey2019-06-08 09:55:20
Python
Whey, 2019-06-08 09:55:20

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:
5cfb5b55267eb567154269.png

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

1 answer(s)
V
Vladimir Kuts, 2019-06-08
@Whey

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 question

Ask a Question

731 491 924 answers to any question