-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathphil.py
More file actions
68 lines (56 loc) · 2.79 KB
/
phil.py
File metadata and controls
68 lines (56 loc) · 2.79 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
#!/usr/bin/env python3
import urllib.request
def get_content(name):
try:
data = bytes()
with urllib.request.urlopen(name) as f:
data = f.read().decode('utf-8')
return data
else:
return None
"""
Функция возвращает содержимое вики-страницы name из русской Википедии.
В случае ошибки загрузки или отсутствия страницы возвращается None.
"""
def extract_content(page):
start = page.find('<div id="content"')
queque = 1 if (start > 0) else return (0, 0)
point = start
while(queque > 0):
point += 3
point = page.find("div",point)
if (page[point - 2: point + 4] == "</div>"):
queque -= 1
elif (page[point - 1: point + 4] == "<div "):
queque += 1
return (start, point + 3)
"""
Функция принимает на вход содержимое страницы и возвращает 2-элементный
tuple, первый элемент которого — номер позиции, с которой начинается
содержимое статьи, второй элемент — номер позиции, на котором заканчивается
содержимое статьи.
Если содержимое отсутствует, возвращается (0, 0).
"""
def extract_links(page, begin, end):
collect = set()
links_list = re.findall(r"/wiki/*?\"",page[begin: end])
links_list = list(map(lambda link : "https://ru.wikipedia.org" + link[0:-1],links_list))
links_list = list(e for e in links_list if e not in collect and not collect.add(e)]
return links_list
"""
Функция принимает на вход содержимое страницы и начало и конец интервала,
задающего позицию содержимого статьи на странице и возвращает все имеющиеся
ссылки на другие вики-страницы без повторений и с учётом регистра.
"""
def find_chain(start, finish):
"""
Функция принимает на вход название начальной и конечной статьи и возвращает
список переходов, позволяющий добраться из начальной статьи в конечную.
Первым элементом результата должен быть start, последним — finish.
Если построить переходы невозможно, возвращается None.
"""
pass
def main():
pass
if __name__ == '__main__':
main()