# 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)
```
а теперь попробуем скачать