-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathscraper.py
More file actions
70 lines (44 loc) · 1.89 KB
/
Copy pathscraper.py
File metadata and controls
70 lines (44 loc) · 1.89 KB
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
import requests
from bs4 import BeautifulSoup
from user.exception import ValidationException
from problem.models import *
from codechef.models import *
def divisionScraper(contest_id):
contest_url = f"https://www.codechef.com/api/contests/{contest_id}"
contest_req = requests.get(contest_url)
if contest_req.status_code != 200:
raise ValidationException(
'Failed Scrapping Codechef Contest Divisions')
contest_req = contest_req.json()
return contest_req
def contestScraper(offset, contest_type):
query_contest_url = f"https://www.codechef.com/api/list/contests/" + contest_type + "?sort_by=START&sorting_order=desc&offset=" + str(
offset) + "&mode=premium"
# Query URL might change in future.
contest_data = requests.get(query_contest_url)
if contest_data.status_code != 200:
raise ValidationException('Failed Scrapping Codechef Contests')
contest_data = contest_data.json()
return contest_data
def problemScraper(contest_code):
query_problem_url = f"https://www.codechef.com/api/contests/{contest_code}"
# Query URL might change inuserid future.
problem_data = requests.get(query_problem_url)
if problem_data.status_code != 200:
raise ValidationException('Failed Scrapping Codechef Problems')
problem_data = problem_data.json()
return problem_data
def UserSubmissionScraper(URL):
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
return soup
def recentSubmissionScraper(user_handle):
URL = f"https://www.codechef.com/recent/user?user_handle={user_handle}"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
return soup
def profilePageScraper(user_handle):
query_user_profile_url = f"https://www.codechef.com/users/{user_handle}"
r = requests.get(query_user_profile_url)
soup = BeautifulSoup(r.text, 'html.parser')
return soup