---
# System prepended metadata

title: Requests & Beautifulsoup4

---

# Requests & Beautifulsoup4
## Requests

### Install 
```
pip install requests BeautifulSoup4 lxml
```
### Import 

```
import requests
from bs4 import BeautifulSoup
```

### HTTP methods

GET - когда мы хотим запросить информацию у сервера.
HEAD - тоже самое, только без тела запрос
POST - применяется для передачи пользовательских данных заданному ресурсу
PUT - применяется для загрузки содержимого запроса на указанный в запросе URI
DELETE - удаляет указанный ресурс
TRACE - возвращает полученный запрос так, что клиент может увидеть, какую информацию промежуточные серверы добавляют или изменяют в запросе

### Status code
200 - ОК
301 - перемещено навсегда
400 - плохой, неверный запрос
404 - не найдено
500 - внутренняя ошибка сервера

#### The Response
получаем результат нашей страницы с помощью get запроса
```
response = requests.get('https://api.github.com')
```

проверяем полученный код 
```
if response.status_code == 200:
    print('Success!')
elif response.status_code == 404:
    print('Not Found.')
```

другие запросы
```
requests.post('https://httpbin.org/post', data={'key':'value'})
requests.put('https://httpbin.org/put', data={'key':'value'})
requests.delete('https://httpbin.org/delete')
requests.head('https://httpbin.org/get')
```

## bs4

это наша web страница, и мы хотим получить текст

```
<!DOCTYPE html>
<html>
<head>
  <title>Contrived Example</title>
</head>
<body>
<p id="eggman"> I am the egg man </p>
<p id="walrus"> I am the walrus </p>
</body>
</html>
```

сохраняем ее как a.html
``` 
from bs4 import BeautifulSoup
raw_html = open('contrived.html').read()
html = BeautifulSoup(raw_html, 'lxml')
for p in html.select('p'):
    if p['id'] == 'walrus':
        print(p.text)
```

а это мы получаем массив математиков 
```
raw_html = requests.get('http://www.fabpedigree.com/james/mathmen.htm')
html = BeautifulSoup(raw_html.content, 'lxml')
for i, li in enumerate(html.select('li')):
    print(i, li.text)
```

а теперь попробуем скачать 