{"id":299621,"date":"2020-03-03T15:00:48","date_gmt":"2020-03-03T15:00:48","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=299621"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=299621","title":{"rendered":"\u0412\u0435\u0441\u044c \u0425\u0430\u0431\u0440 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0431\u0430\u0437\u0435"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/490820\/\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c. \u041f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 2 \u0433\u043e\u0434\u0430 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f <a href=\"https:\/\/habr.com\/ru\/post\/346198\/\">\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043f\u0440\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0425\u0430\u0431\u0440\u0430, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c. <\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0438\u043c\u0435\u0442\u044c \u0443 \u0441\u0435\u0431\u044f \u043a\u043e\u043f\u0438\u044e \u0445\u0430\u0431\u0440\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0448\u043b\u043e \u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<p>TL;DR \u2014 <a href=\"https:\/\/mega.nz\/#F!2ToAVa7Y!ZxnFgMjMVMyo07LC1W0IaQ\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445<\/a><\/p>\n<p>  <\/p>\n<h2 id=\"pervaya-versiya-parsera-odin-potok-mnogo-problem\">\u041f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0430\u0440\u0441\u0435\u0440\u0430. \u041e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a, \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u044b \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u0438 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u0430\u0440\u0441\u0438\u043b\u0430\u0441\u044c \u0438 \u043f\u043e\u043c\u0435\u0449\u0430\u043b\u0430\u0441\u044c \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0435\u0434\u043e\u043b\u0433\u043e \u0434\u0443\u043c\u0430\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b sqlite3, \u0442.\u043a. \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043c\u0435\u043d\u0435\u0435 \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e: \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0441\u043e\u0437\u0434\u0430\u043b-\u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b-\u0443\u0434\u0430\u043b\u0438\u043b \u0438 \u0432\u0441\u0435 \u0432 \u0442\u0430\u043a\u043e\u043c \u0434\u0443\u0445\u0435.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">one_thread.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">from bs4 import BeautifulSoup import sqlite3 import requests from datetime import datetime  def main(min, max):     conn = sqlite3.connect('habr.db')     c = conn.cursor()     c.execute('PRAGMA encoding = &quot;UTF-8&quot;')     c.execute(&quot;CREATE TABLE IF NOT EXISTS habr(id INT, author VARCHAR(255), title VARCHAR(255), content  TEXT, tags TEXT)&quot;)      start_time = datetime.now()     c.execute(&quot;begin&quot;)     for i in range(min, max):         url = &quot;https:\/\/m.habr.com\/post\/{}&quot;.format(i)         try:             r = requests.get(url)         except:             with open(&quot;req_errors.txt&quot;) as file:                 file.write(i)             continue         if(r.status_code != 200):             print(&quot;{} - {}&quot;.format(i, r.status_code))             continue          html_doc = r.text         soup = BeautifulSoup(html_doc, 'html.parser')          try:             author = soup.find(class_=&quot;tm-user-info__username&quot;).get_text()             content = soup.find(id=&quot;post-content-body&quot;)             content = str(content)             title = soup.find(class_=&quot;tm-article-title__text&quot;).get_text()             tags = soup.find(class_=&quot;tm-article__tags&quot;).get_text()             tags = tags[5:]         except:             author,title,tags = &quot;Error&quot;, &quot;Error {}&quot;.format(r.status_code), &quot;Error&quot;             content = &quot;\u041f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.&quot;          c.execute('INSERT INTO habr VALUES (?, ?, ?, ?, ?)', (i, author, title, content, tags))         print(i)     c.execute(&quot;commit&quot;)     print(datetime.now() - start_time)  main(1, 490406)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0412\u0441\u0451 \u043f\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u043a\u0435 \u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Beautiful Soup, requests \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0433\u043e\u0442\u043e\u0432. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e\u2026<\/p>\n<p>  <\/p>\n<ul>\n<li>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0434\u0435\u0442 \u0432 \u043e\u0434\u0438\u043d \u043f\u043e\u0442\u043e\u043a<\/p>\n<p>  <\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0431\u043e\u0440\u0432\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0442\u043e \u0432\u0441\u044f \u0431\u0430\u0437\u0430 \u0443\u0439\u0434\u0435\u0442 \u0432 \u043d\u0438\u043a\u0443\u0434\u0430. \u0412\u0435\u0434\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430.<br \/>  \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0437\u0435 \u043f\u043e\u0441\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u044b.<\/p>\n<p>  <\/li>\n<li>\n<p>\u041f\u0430\u0440\u0441\u0438\u043d\u0433 \u043f\u0435\u0440\u0432\u044b\u0445 100 000 \u0441\u0442\u0430\u0442\u0435\u0439 \u0443 \u043c\u0435\u043d\u044f \u0437\u0430\u043d\u044f\u043b 8 \u0447\u0430\u0441\u043e\u0432.<\/p>\n<p>  <\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u044c\u0448\u0435 \u044f \u043d\u0430\u0445\u043e\u0436\u0443 \u0441\u0442\u0430\u0442\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f <a href=\"https:\/\/habr.com\/ru\/users\/cointegrated\/\" class=\"user_link\">cointegrated<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b \u0438 \u043d\u0430\u0448\u0435\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0430\u0439\u0444\u0445\u0430\u043a\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0441\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0432 \u0440\u0430\u0437\u044b.<\/li>\n<li>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0445\u0430\u0431\u0440\u0430, \u0430 \u0435\u0433\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044f cointegrated \u0432 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u0435\u0441\u0438\u0442 378 \u041a\u0431, \u0442\u043e \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0443\u0436\u0435 126 \u041a\u0431.<\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"vtoraya-versiya-mnogo-potokov-vremennyy-ban-ot-habra\">\u0412\u0442\u043e\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u041c\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0431\u0430\u043d \u043e\u0442 \u0425\u0430\u0431\u0440\u0430<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u0440\u043e\u0448\u0435\u0440\u0441\u0442\u0438\u043b \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043d\u0430 \u0442\u0435\u043c\u0443 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 python, \u0432\u044b\u0431\u0440\u0430\u043b \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 multiprocessing.dummy, \u0442\u043e \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>  <\/p>\n<p><strong>SQLite3 \u043d\u0435 \u0445\u043e\u0447\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c<\/strong>.<br \/>  \u0424\u0438\u043a\u0441\u0438\u0442\u0441\u044f <code>check_same_thread=False<\/code>, \u043d\u043e \u044d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f, \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u0431\u0430\u0437\u0443 \u0438\u043d\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u0441\u043c\u043e\u0433 \u0440\u0435\u0448\u0438\u0442\u044c.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0430\u044e \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e\u0439 \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0441\u0442\u0430\u0442\u0435\u0439 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0431\u0430\u0437\u0443 \u0438, \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 cointegrated, \u0440\u0435\u0448\u0430\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u0442.\u043a \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u0444\u0430\u0439\u043b \u043d\u0435\u0442.<\/p>\n<p>  <\/p>\n<p><strong>\u0425\u0430\u0431\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0431\u0430\u043d\u0438\u0442\u044c \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0442\u0440\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<\/strong>.<br \/>  \u041e\u0441\u043e\u0431\u043e \u0440\u044c\u044f\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0425\u0430\u0431\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f \u0431\u0430\u043d\u043e\u043c ip \u043d\u0430 \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u044c 3 \u043f\u043e\u0442\u043e\u043a\u0430, \u043d\u043e \u0438 \u044d\u0442\u043e \u0443\u0436\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u0430\u043a \u0432\u0440\u0435\u043c\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 100 \u0441\u0442\u0430\u0442\u0435\u0439 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u0441 26 \u0434\u043e 12 \u0441\u0435\u043a\u0443\u043d\u0434.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430, \u0438 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">async_v1.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">from bs4 import BeautifulSoup import requests import os, sys import json from multiprocessing.dummy import Pool as ThreadPool from datetime import datetime import logging  def worker(i):     currentFile = &quot;files\\\\{}.json&quot;.format(i)      if os.path.isfile(currentFile):         logging.info(&quot;{} - File exists&quot;.format(i))         return 1      url = &quot;https:\/\/m.habr.com\/post\/{}&quot;.format(i)      try: r = requests.get(url)     except:         with open(&quot;req_errors.txt&quot;) as file:             file.write(i)         return 2      # \u0417\u0430\u043f\u0438\u0441\u044c \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440     if (r.status_code == 503):         with open(&quot;Error503.txt&quot;, &quot;a&quot;) as write_file:             write_file.write(str(i) + &quot;\\n&quot;)             logging.warning('{} \/ 503 Error'.format(i))      # \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u0442\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u043e\u043d \u0431\u044b\u043b \u0441\u043a\u0440\u044b\u0442     if (r.status_code != 200):         logging.info(&quot;{} \/ {} Code&quot;.format(i, r.status_code))         return r.status_code      html_doc = r.text     soup = BeautifulSoup(html_doc, 'html5lib')      try:         author = soup.find(class_=&quot;tm-user-info__username&quot;).get_text()          timestamp = soup.find(class_='tm-user-meta__date')         timestamp = timestamp['title']          content = soup.find(id=&quot;post-content-body&quot;)         content = str(content)         title = soup.find(class_=&quot;tm-article-title__text&quot;).get_text()         tags = soup.find(class_=&quot;tm-article__tags&quot;).get_text()         tags = tags[5:]          # \u041c\u0435\u0442\u043a\u0430, \u0447\u0442\u043e \u043f\u043e\u0441\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u0438\u043b\u0438 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c.         tm_tag = soup.find(class_=&quot;tm-tags tm-tags_post&quot;).get_text()          rating = soup.find(class_=&quot;tm-votes-score&quot;).get_text()     except:         author = title = tags = timestamp = tm_tag = rating = &quot;Error&quot;          content = &quot;\u041f\u0440\u0438 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.&quot;         logging.warning(&quot;Error parsing - {}&quot;.format(i))         with open(&quot;Errors.txt&quot;, &quot;a&quot;) as write_file:             write_file.write(str(i) + &quot;\\n&quot;)      # \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0441\u0442\u0430\u0442\u044c\u044e \u0432 json     try:         article = [i, timestamp, author, title, content, tm_tag, rating, tags]         with open(currentFile, &quot;w&quot;) as write_file:             json.dump(article, write_file)     except:         print(i)         raise  if __name__ == '__main__':     if len(sys.argv) &lt; 3:         print(&quot;\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b min \u0438 max. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435: async_v1.py 1 100&quot;)         sys.exit(1)     min = int(sys.argv[1])     max = int(sys.argv[2])      # \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 &gt;3     # \u0442\u043e \u0445\u0430\u0431\u0440 \u0431\u0430\u043d\u0438\u0442 ip\u0448\u043d\u0438\u043a \u043d\u0430 \u0432\u0440\u0435\u043c\u044f     pool = ThreadPool(3)      # \u041e\u0442\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0442\u043e\u043a\u043e\u0432     start_time = datetime.now()     results = pool.map(worker, range(min, max))      # \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f     pool.close()     pool.join()     print(datetime.now() - start_time)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"tretya-versiya-finalnaya\">\u0422\u0440\u0435\u0442\u044c\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f<\/h2>\n<p>  <\/p>\n<p>\u041e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u044f \u0432\u0442\u043e\u0440\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u0443 \u0425\u0430\u0431\u0440\u0430, \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e, \u0435\u0441\u0442\u044c API, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u0430\u0439\u0442\u0430. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u043e\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e json, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0430\u0436\u0435 \u043f\u0430\u0440\u0441\u0438\u0442\u044c \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u0437\u0430\u043d\u043e\u0432\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u0439 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u0430\u043a, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432 \u043f\u043e <a href=\"https:\/\/m.habr.com\/kek\/v1\/articles\/1\/?fl=ru%2Cen&amp;hl=ru\">\u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a> API, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0435\u0433\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0443.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">API.png<\/b><\/p>\n<div class=\"spoiler_text\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/bk\/1i\/nf\/bk1infraacmta3kk_5hppvuxbzs.png\"\/><\/p>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0412 \u043d\u0435\u043c \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u044f, \u043e\u0442\u043d\u043e\u0441\u044f\u0449\u0438\u0435\u0441\u044f \u043a\u0430\u043a \u043a \u0441\u0430\u043c\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435, \u0442\u0430\u043a \u0438 \u043a \u0430\u0432\u0442\u043e\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0451 \u043d\u0430\u043f\u0438\u0441\u0430\u043b.<\/p>\n<p>  <\/p>\n<p>\u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0434\u0430\u043c\u043f\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 json \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u043b\u0438\u0448\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043c\u043d\u0435 \u043f\u043e\u043b\u044f:<\/p>\n<p>  <\/p>\n<ul>\n<li>id<\/li>\n<li>is_tutorial<\/li>\n<li>time_published<\/li>\n<li>title<\/li>\n<li>content<\/li>\n<li>comments_count<\/li>\n<li>lang \u2014 \u044f\u0437\u044b\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f. \u041f\u043e\u043a\u0430 \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0442\u043e\u043b\u044c\u043a\u043e en \u0438 ru.<\/li>\n<li>tags_string \u2014 \u0432\u0441\u0435 \u0442\u0435\u0433\u0438 \u0438\u0437 \u043f\u043e\u0441\u0442\u0430<\/li>\n<li>reading_count<\/li>\n<li>author<\/li>\n<li>score \u2014 \u0440\u0435\u0439\u0442\u0438\u043d\u0433 \u0441\u0442\u0430\u0442\u044c\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f API, \u044f \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u0434\u043e 8 \u0441\u0435\u043a\u0443\u043d\u0434 \u043d\u0430 100 url.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u0441\u043a\u0430\u0447\u0430\u043b\u0438 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0435, \u043d\u0443\u0436\u043d\u043e \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421 \u044d\u0442\u0438\u043c \u0442\u043e\u0436\u0435 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">async_v2.py<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">import requests import os, sys import json from multiprocessing.dummy import Pool as ThreadPool from datetime import datetime import logging  def worker(i):     currentFile = &quot;files\\\\{}.json&quot;.format(i)      if os.path.isfile(currentFile):         logging.info(&quot;{} - File exists&quot;.format(i))         return 1      url = &quot;https:\/\/m.habr.com\/kek\/v1\/articles\/{}\/?fl=ru%2Cen&amp;hl=ru&quot;.format(i)      try:         r = requests.get(url)         if r.status_code == 503:             logging.critical(&quot;503 Error&quot;)             return 503     except:         with open(&quot;req_errors.txt&quot;) as file:             file.write(i)         return 2      data = json.loads(r.text)      if data['success']:         article = data['data']['article']          id = article['id']         is_tutorial = article['is_tutorial']         time_published = article['time_published']         comments_count = article['comments_count']         lang = article['lang']         tags_string = article['tags_string']         title = article['title']         content = article['text_html']         reading_count = article['reading_count']         author = article['author']['login']         score = article['voting']['score']          data = (id, is_tutorial, time_published, title, content, comments_count, lang, tags_string, reading_count, author, score)         with open(currentFile, &quot;w&quot;) as write_file:             json.dump(data, write_file)  if __name__ == '__main__':     if len(sys.argv) &lt; 3:         print(&quot;\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b min \u0438 max. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435: asyc.py 1 100&quot;)         sys.exit(1)     min = int(sys.argv[1])     max = int(sys.argv[2])      # \u0415\u0441\u043b\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 &gt;3     # \u0442\u043e \u0445\u0430\u0431\u0440 \u0431\u0430\u043d\u0438\u0442 ip\u0448\u043d\u0438\u043a \u043d\u0430 \u0432\u0440\u0435\u043c\u044f     pool = ThreadPool(3)      # \u041e\u0442\u0441\u0447\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u043e\u0442\u043e\u043a\u043e\u0432     start_time = datetime.now()     results = pool.map(worker, range(min, max))      # \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f     pool.close()     pool.join()     print(datetime.now() - start_time) <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"statistika\">\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430<\/h2>\n<p>  <\/p>\n<p>\u041d\u0443 \u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e, \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438\u0437 \u0434\u0430\u043d\u043d\u044b\u0445:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0418\u0437 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 490 406 \u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0447\u0430\u043d\u043e \u043b\u0438\u0448\u044c 228 512 \u0441\u0442\u0430\u0442\u0435\u0439. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b(261894) \u0441\u0442\u0430\u0442\u0435\u0439 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0431\u044b\u043b\u043e \u0441\u043a\u0440\u044b\u0442\u043e \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043e.<\/li>\n<li>\u0412\u0441\u044f \u0431\u0430\u0437\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0430\u044f \u0438\u0437 \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u0443\u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u0441\u0442\u0430\u0442\u0435\u0439, \u0432\u0435\u0441\u0438\u0442 2.95 \u0413\u0431. \u0412 \u0441\u0436\u0430\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u2014 495 \u041c\u0431.<\/li>\n<li>\u0412\u0441\u0435\u0433\u043e \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f 37804 \u0447\u0435\u043b\u043e\u0432\u0435\u043a. \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0436\u0438\u0432\u044b\u0445 \u043f\u043e\u0441\u0442\u043e\u0432.<\/li>\n<li>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u2014 <a href=\"https:\/\/habr.com\/ru\/users\/alizar\/\" class=\"user_link\">alizar<\/a> \u2014 8774 \u0441\u0442\u0430\u0442\u044c\u0438.<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/133473\/\">\u0421\u0442\u0430\u0442\u044c\u044f \u0441 \u0441\u0430\u043c\u044b\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u043e\u043c<\/a> \u2014 1448 \u043f\u043b\u044e\u0441\u043e\u0432<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/54999\/\">\u0421\u0430\u043c\u0430\u044f \u0447\u0438\u0442\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u2014 1660841 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432<\/li>\n<li><a href=\"https:\/\/habr.com\/ru\/post\/423889\/\">\u0421\u0430\u043c\u0430\u044f \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f<\/a> \u2014 2444 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0443 \u0438 \u0432 \u0432\u0438\u0434\u0435 \u0442\u043e\u043f\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\">\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u043e\u043f 15 \u0430\u0432\u0442\u043e\u0440\u043e\u0432<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/a9\/ya\/gv\/a9yagvfuuixnzhr4oysi99nk7li.png\"\/><\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u043e\u043f 15 \u043f\u043e \u0440\u0435\u0439\u0442\u0438\u043d\u0433\u0443<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/hsto.org\/webt\/ws\/51\/nq\/ws51nqvbi0jvh6sqxpvokhnppss.png\"\/><\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u043e\u043f 15 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/hsto.org\/webt\/pz\/wl\/to\/pzwltofymrrnyl7psxzvkmgcmow.png\"\/><\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u043e\u043f 15 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u0435\u043c\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/hsto.org\/webt\/sa\/fi\/_h\/safi_hbmaa4zkth2jzmmgewm6zm.png\"\/><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/490820\/\"> https:\/\/habr.com\/ru\/post\/490820\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/490820\/\">\n<p>\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c. \u041f\u0440\u043e\u0448\u043b\u043e \u0443\u0436\u0435 2 \u0433\u043e\u0434\u0430 \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f <a href=\"https:\/\/habr.com\/ru\/post\/346198\/\">\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a> \u043f\u0440\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433 \u0425\u0430\u0431\u0440\u0430, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c. <\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0445\u043e\u0442\u0435\u043b \u0438\u043c\u0435\u0442\u044c \u0443 \u0441\u0435\u0431\u044f \u043a\u043e\u043f\u0438\u044e \u0445\u0430\u0431\u0440\u0430, \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043b \u0432\u0435\u0441\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0430\u0432\u0442\u043e\u0440\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u044b\u0448\u043b\u043e \u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0441\u044f \u2014 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-299621","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/299621","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=299621"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/299621\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=299621"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=299621"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=299621"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}