<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Парсинг веб-страниц
Step1:  3a. Парсинг заголовков верхнего уровня со страницы https
Step2:  Создадим парсер для страницы и выведем содержимое страницы
Step3:  Зададим функцию для печати значений нужного тега
Step4:  Так как из текста задания не совсем понятно, какие заголовки считать заголовками верхнего уровня, выведем отдельно все заголовки для первого, второго и третьего уровней.
Заголовки первого уровня
Step5:  Заголовки второго уровня
Step6:  Заголовки третьего уровня
Step7:  3b. Парсинг названий всех статей в категории Machine Learning Algorithms со страницы https
Step8:  Создадим парсер для страницы и выведем содержимое страницы
Step9:  Изучив структуру верстки страницы, определим тег, содержащий интересующие нас заголовки
Step10:  Названия статей в категории "Machine Learning"
<ASSISTANT_TASK:>
Python Code:
import requests
from bs4 import BeautifulSoup
Explanation: Парсинг веб-страниц
End of explanation
req = requests.get('https://en.wikipedia.org/wiki/Bias-variance_tradeoff')
print req
Explanation: 3a. Парсинг заголовков верхнего уровня со страницы https://en.wikipedia.org/wiki/Bias-variance_tradeoff
Выполним запрос указанной страницы и проверим, что она доступна
End of explanation
parser = BeautifulSoup(req.text, 'lxml')
print parser.prettify()
Explanation: Создадим парсер для страницы и выведем содержимое страницы
End of explanation
def print_tags(parser, key='h1'):
    for tag in parser.find_all(key):
        print tag.text
Explanation: Зададим функцию для печати значений нужного тега:
End of explanation
print_tags(parser, 'h1')
Explanation: Так как из текста задания не совсем понятно, какие заголовки считать заголовками верхнего уровня, выведем отдельно все заголовки для первого, второго и третьего уровней.
Заголовки первого уровня:
End of explanation
for t in parser.find_all('h2'):
    if t.span is not None and 'class' in t.span.attrs  and 'mw-headline' in t.span.attrs['class']:
        print t.span.text
Explanation: Заголовки второго уровня:
End of explanation
for t in parser.find_all('h3'):
    if t.span is not None and 'class' in t.span.attrs and 'mw-headline' in t.span.attrs['class']:
        print t.span.text
Explanation: Заголовки третьего уровня
End of explanation
req = requests.get('https://en.wikipedia.org/wiki/Category:Machine_learning_algorithms')
print req
Explanation: 3b. Парсинг названий всех статей в категории Machine Learning Algorithms со страницы https://en.wikipedia.org/wiki/Category:Machine_learning_algorithms
Выполним запрос указанной страницы и проверим, что она доступна
End of explanation
parser = BeautifulSoup(req.text, 'lxml')
print parser.prettify()
Explanation: Создадим парсер для страницы и выведем содержимое страницы
End of explanation
pages = parser.find(string='Pages in category "Machine learning algorithms"')
data_parent = pages.parent.parent.div.div
Explanation: Изучив структуру верстки страницы, определим тег, содержащий интересующие нас заголовки
End of explanation
print_tags(data_parent, 'a')
Explanation: Названия статей в категории "Machine Learning"
End of explanation
<END_TASK>