我正在寻找解析html代码的最佳方法

时间:2019-08-13 19:09:52

标签: python html python-3.x parsing beautifulsoup

我正在处理上学申请。它的任务是读取主题名称和div类名称。班级名称不同于您是否在场。 最后,我必须总结一下每个单独学校科目全年的出勤率。

代码从一天开始。我必须在一年中的每一天都这样做。然后将其汇总为百分比。

我尝试使用BeautyfulSoup,但这是一项非常繁琐的工作。

例如:

'przedmiot obecnosc_3'-该课程中没有学生

'przedmiot obecnosc_0'-该学生在课堂上出现

'2jęz。奥比西niemiecki'-学校名称

<td id="dzien_30" class="dzienMiesiaca" style="height: 144px;">
    <div class="dzienMiesiacaHead">30</div>
    <div class="okienko">-</div>
    <div id="przedmiot_142" class="przedmiot obecnosc_3" </div> ### needed name of class ###
        <div class="cOznacz"></div>
        2 - 2 jęz. obcy/jęz. niemiecki #### subject name ###
    </div>
    <div id="przedmiot_143" class="przedmiot obecnosc_0" onclick="PokazInfoPrzedmiot(143);">
        <div class="cOznacz"></div>
        3 - matematyka rozszerzona
    </div>
    <div id="przedmiot_144" class="przedmiot obecnosc_0" onclick="PokazInfoPrzedmiot(144);">
        <div class="cOznacz"></div>
        4 - matematyka rozszerzona
    </div>
    <div id="przedmiot_145" class="przedmiot obecnosc_0" onclick="PokazInfoPrzedmiot(145);">
        <div class="cOznacz"></div>
        5 - wychowanie fizyczne
    </div>
    <div id="przedmiot_146" class="przedmiot obecnosc_0" onclick="PokazInfoPrzedmiot(146);">
        <div class="cOznacz"></div>
        6 - wychowanie fizyczne
    </div>
    <div id="przedmiot_147" class="przedmiot obecnosc_0" onclick="PokazInfoPrzedmiot(147);">
        <div class="cOznacz"></div>
        7 - 1 jęz. obcy/jęz. angielski
    </div>
    <div id="przedmiot_148" class="przedmiot obecnosc_0" onclick="PokazInfoPrzedmiot(148);">
        <div class="cOznacz"></div>
        8 - informatyka rozszerzona
    </div>
</td>

1 个答案:

答案 0 :(得分:1)

如果html_data是您问题中的代码段,则可以执行以下操作:

这将创建subjects字典,其中的键是主题名称,值是具有两个值的列表-第一个值是学生在场的小时数,第二个值是学生在场的小时数:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_data, 'html.parser')

subjects = {}
for subject in soup.select('[class*="obecnosc_"]'):
    not_present = 'obecnosc_3' in subject.attrs['class']
    subjects.setdefault(subject.get_text(strip=True), [0, 0])[not_present] += 1

from pprint import pprint
pprint(subjects)

打印:

{'2 - 2 jęz. obcy/jęz. niemiecki': [0, 1],
 '3 - matematyka rozszerzona': [1, 0],
 '4 - matematyka rozszerzona': [1, 0],
 '5 - wychowanie fizyczne': [1, 0],
 '6 - wychowanie fizyczne': [1, 0],
 '7 - 1 jęz. obcy/jęz. angielski': [1, 0],
 '8 - informatyka rozszerzona': [1, 0]}