-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpu_test.py
116 lines (84 loc) · 4.61 KB
/
pu_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import requests
import sys
from bs4 import BeautifulSoup as bs
from prettytable import PrettyTable
search_id = input("Enter a file name to save result (eg: College Name) : ")
print("A valid Reg No is 6 digit number")
reg_id_start =input("Enter Starting Register Number : ")
reg_id_end = input("Enter Ending Register Number : ")
result_url = 'http://karresults.nic.in/resPUC_2021.asp'
reg_id_start=int(reg_id_start)
reg_id_end= int(reg_id_end)
def scrap_results():
for reg_id in range(reg_id_start, reg_id_end):
page = requests.post(result_url, data = {'reg': reg_id})
soap = bs(page.text, "html.parser")
user_detail_table = soap.find('table', id='details').find_all('tr')
user_name = user_detail_table[0].find_all('td')[-1].text.strip()
roll_number = user_detail_table[1].find_all('td')[-1].text.strip()
all_panels = soap.find_all('div', class_='panel panel-primary')
part_a_panel = all_panels[0].find('table')
part_a_headings = part_a_panel.find_all('th')
heading_subject_a = part_a_headings[0].text.strip()
heading_theory_mark_a = part_a_headings[1].text.strip()
heading_internal_mark_a = part_a_headings[2].text.strip()
heading_total_mark_a = part_a_headings[3].text.strip()
part_a_subject_list = part_a_panel.find_all('tr')
marks_dict_a = {}
for tr_tag in range(1, len(part_a_subject_list) - 1):
td_tags = part_a_subject_list[tr_tag].find_all('td')
subject = td_tags[0].text.strip()
theory_mark = td_tags[1].text.strip()
internal_mark = td_tags[2].text.strip() if not " " else "-"
total_mark = td_tags[3].text.strip()
marks_dict_a[subject] = [theory_mark,internal_mark,total_mark]
part_a_total = part_a_subject_list[-1].find_all('td')[1].span.text.strip()
part_b_panel = all_panels[1].find('table')
part_b_headings = part_b_panel.find_all('th')
heading_subject_b = part_b_headings[0].text.strip()
heading_theory_mark_b = part_b_headings[1].text.strip()
heading_practical_mark_b = part_b_headings[2].text.strip()
heading_total_mark_b = part_b_headings[3].text.strip()
part_b_subject_list = part_b_panel.find_all('tr')
marks_dict_b = {}
for tr_tag in range(1, len(part_b_subject_list) - 1):
td_tags = part_b_subject_list[tr_tag].find_all('td')
subject = td_tags[0].text.strip()
theory_mark = td_tags[1].text.strip()
practical_mark = td_tags[2].text.strip() if not "" else "-"
total_mark = td_tags[3].text.strip()
marks_dict_b[subject] = [theory_mark, practical_mark, total_mark]
part_b_total = part_b_subject_list[-1].find_all('td')[1].span.text.strip()
final_result_panel = soap.find('table', id="result").find_all('tr')
grand_total = final_result_panel[0].find_all('td')[1].text.strip()
final_result = final_result_panel[1].find_all('td')[1].text.strip()
user_detail = PrettyTable()
user_detail.title = f"Result for {user_name} - ({roll_number})"
user_detail.field_names = ['Part A Total', 'Part B Total', 'GRAND TOTAL MARKS', 'FINAL RESULT']
user_detail.add_row([part_a_total, part_b_total, grand_total, final_result])
result_table_a = PrettyTable()
result_table_a.field_names = [heading_subject_a, heading_theory_mark_a, heading_internal_mark_a, heading_total_mark_a]
result_table_a.title = "PART A"
for subject_name, marks_field in marks_dict_a.items():
temp = [subject_name]
temp.extend(marks_field)
result_table_a.add_row(temp)
result_table_b = PrettyTable()
result_table_b.field_names = [heading_subject_b, heading_theory_mark_b, heading_practical_mark_b, heading_total_mark_b]
result_table_b.title = "PART B"
for subject_name, marks_field in marks_dict_b.items():
temp = [subject_name]
temp.extend(marks_field)
result_table_b.add_row(temp)
with open(str(search_id)+'.txt', 'a', encoding='utf-8') as infile:
print(user_detail, file=infile)
print(result_table_a, file=infile)
print(result_table_b, file=infile, end="\n\n\n\n")
print("----------------------------------------------------------------------", file=infile, end="\n\n\n\n")
return True
if __name__ == '__main__':
sys.stdout.write('Wait. Data is being scrapped...')
sys.stdout.flush()
finished = scrap_results()
if finished:
print('Finished! Check the '+str(search_id)+'.txt file!')