|
12 | 12 | import requests |
13 | 13 | from bs4 import BeautifulSoup, Tag |
14 | 14 |
|
15 | | -from config import START_DATE |
| 15 | +from config import START_DATE, FILE_COOKIES |
16 | 16 |
|
17 | 17 |
|
18 | 18 | decimal.getcontext().prec = 2 |
19 | 19 |
|
| 20 | +session = requests.session() |
| 21 | + |
| 22 | +# NOTE: Зачем-то сайт с API добавил проверку на роботов, возможно, много запросов, а менять |
| 23 | +# работу сайта, добавляя API-key было сложно или много по времени |
| 24 | +# Example: |
| 25 | +# __ddgid=r6nn<...>4W; __ddg2=u5rq<...>wV9; __ddg1=gzBn<...>82mir; __ddgmark=W6X<...>owfI; __ddg5=ocM<...>tvM |
| 26 | +if FILE_COOKIES.exists(): |
| 27 | + try: |
| 28 | + cookies_text = FILE_COOKIES.read_text('utf-8') |
| 29 | + for x in cookies_text.split('; '): |
| 30 | + name, value = x.split('=', maxsplit=1) |
| 31 | + session.cookies.set(name, value) |
| 32 | + except: |
| 33 | + pass |
| 34 | + |
20 | 35 |
|
21 | 36 | class AutoName(enum.Enum): |
22 | 37 | def _generate_next_value_(name, start, count, last_values): |
@@ -88,7 +103,7 @@ def get_metal_rates(date_req1: DT.date, date_req2: DT.date) -> list[MetalRate]: |
88 | 103 | 'date_req1': get_date_str(date_req1), |
89 | 104 | 'date_req2': get_date_str(date_req2), |
90 | 105 | } |
91 | | - rs = requests.get('http://www.cbr.ru/scripts/xml_metall.asp', params=params) |
| 106 | + rs = session.get('http://www.cbr.ru/scripts/xml_metall.asp', params=params) |
92 | 107 | rs.raise_for_status() |
93 | 108 |
|
94 | 109 | root = BeautifulSoup(rs.content, 'html.parser') |
|
0 commit comments