我正在处理上学申请。它的任务是读取主题名称和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>
答案 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]}