เดเตเดกเต เดเดซเตเดฑเตเดฑเตผเดจเตเตบ. เดเดดเตเดคเดฟเดฏเดฟเดเตเดเต 2 เดตเตผเดทเด เดเดดเดฟเดเตเดเต.
เดนเดฌเดฑเดฟเดจเตเดฑเต เดเดฐเต เดชเดเตผเดชเตเดชเต เดฒเดญเดฟเดเตเดเดพเตป เดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเดชเตเดชเตเตพ, เดฐเดเดฏเดฟเดคเดพเดเตเดเดณเตเดเต เดเดฒเตเดฒเดพ เดเดณเตเดณเดเดเตเดเดตเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดธเดเดฐเดเตเดทเดฟเดเตเดเตเดจเตเดจ เดเดฐเต เดชเดพเดดเตเดธเตผ เดเดดเตเดคเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต. เดเดคเต เดเดเตเดเดจเต เดธเดเดญเดตเดฟเดเตเดเต, เดเดจเตเดคเต เดชเดฟเดถเดเตเดเตพ เดเดพเตป เดจเตเดฐเดฟเดเตเดเต - เดจเดฟเดเตเดเตพเดเตเดเต เดเดเตเดเดฟเดจเต เดเตเดดเดฟเตฝ เดตเดพเดฏเดฟเดเตเดเดพเด.
TL;DR -
เดชเดพเตผเดธเดฑเดฟเดจเตเดฑเต เดเดฆเตเดฏ เดชเดคเดฟเดชเตเดชเต. เดเดฐเต เดคเตเดฐเตเดกเต, เดจเดฟเดฐเดตเดงเดฟ เดชเตเดฐเดถเตเดจเดเตเดเตพ
เดคเตเดเดเตเดเดคเตเดคเดฟเตฝ, เดเดพเตป เดเดฐเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดชเตเดฐเตเดเตเดเตเดเตเดชเตเดชเต เดจเดฟเตผเดฎเตเดฎเดฟเดเตเดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต, เด เดคเดฟเตฝ เดฒเตเดเดจเด เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ เดคเดจเตเดจเต เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดธเตเดฅเดพเดชเดฟเดเตเดเตเดเดฏเตเด เดเตเดฏเตเดฏเตเด. เดฐเดฃเตเดเตเดคเดตเดฃ เดเดฒเตเดเดฟเดเตเดเดพเดคเต, เดเดพเตป sqlite3 เดเดชเดฏเตเดเดฟเดเตเดเต, เดเดพเดฐเดฃเด. เดเดคเดฟเดจเต เด เดงเตเดตเดพเดจเด เดเตเดฑเดตเดพเดฏเดฟเดฐเตเดจเตเดจเต: เดเดฐเต เดชเตเดฐเดพเดฆเตเดถเดฟเด เดธเตเตผเดตเตผ เดเดตเดถเตเดฏเดฎเดฟเดฒเตเดฒ, เดธเตเดทเตเดเดฟเดเตเดเดคเดพเดฏเดฟ เดเดพเดฃเดชเตเดชเตเดเตเดเต-เดเดฒเตเดฒเดพเดคเดพเดเตเดเดฟเดฏเดคเตเด เด เดคเตเดชเตเดฒเตเดณเตเดณเดตเดฏเตเด.
one_thread.py
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 = "UTF-8"')
c.execute("CREATE TABLE IF NOT EXISTS habr(id INT, author VARCHAR(255), title VARCHAR(255), content TEXT, tags TEXT)")
start_time = datetime.now()
c.execute("begin")
for i in range(min, max):
url = "https://m.habr.com/post/{}".format(i)
try:
r = requests.get(url)
except:
with open("req_errors.txt") as file:
file.write(i)
continue
if(r.status_code != 200):
print("{} - {}".format(i, r.status_code))
continue
html_doc = r.text
soup = BeautifulSoup(html_doc, 'html.parser')
try:
author = soup.find(class_="tm-user-info__username").get_text()
content = soup.find(id="post-content-body")
content = str(content)
title = soup.find(class_="tm-article-title__text").get_text()
tags = soup.find(class_="tm-article__tags").get_text()
tags = tags[5:]
except:
author,title,tags = "Error", "Error {}".format(r.status_code), "Error"
content = "ะัะธ ะฟะฐััะธะฝะณะต ััะพะน ัััะฐะฝะธัะต ะฟัะพะธะทะพัะปะฐ ะพัะธะฑะบะฐ."
c.execute('INSERT INTO habr VALUES (?, ?, ?, ?, ?)', (i, author, title, content, tags))
print(i)
c.execute("commit")
print(datetime.now() - start_time)
main(1, 490406)
เดเดฒเตเดฒเดพเด เดเตเดฒเดพเดธเดฟเดเต เดเดฃเต - เดเดเตเดเตพ เดฌเตเดฏเตเดเตเดเดฟเดซเตเตพ เดธเตเดชเตเดชเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเต, เด เดญเตเดฏเตผเดคเตเดฅเดจเดเตพ, เดเดฐเต เดฆเตเดฐเตเดค เดชเตเดฐเตเดเตเดเตเดเตเดชเตเดชเต เดคเดฏเตเดฏเดพเดฑเดพเดฃเต. เด เดคเต เดตเตเดฑเตเดโฆ
-
เดชเตเดเต เดกเตเตบเดฒเตเดกเต เดเดฐเต เดคเตเดฐเตเดกเดฟเดฒเดพเดฃเต
-
เดจเดฟเดเตเดเตพ เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเดฟเดจเตเดฑเต เดจเดฟเตผเดตเตเดตเดนเดฃเด เดคเดเดธเตเดธเดชเตเดชเตเดเตเดคเตเดคเตเดเดฏเดพเดฃเตเดเตเดเดฟเตฝ, เดฎเตเดดเตเดตเตป เดกเดพเดฑเตเดฑเดพเดฌเตเดธเตเด เดเดตเดฟเดเตเดฏเตเด เดชเตเดเดฟเดฒเตเดฒ. เดเดฒเตเดฒเดพเดคเตเดคเดฟเดจเตเดฎเตเดชเดฐเดฟ, เดเดฒเตเดฒเดพ เดชเดพเดดเตเดธเดฟเดเดเดฟเดจเตเด เดถเตเดทเด เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดเดฎเตเดฎเดฟเดฑเตเดฑเต เดจเดเดคเตเดคเตเดจเตเดจเดคเต.
เดคเตเตผเดเตเดเดฏเดพเดฏเตเด, เดเดฐเต เดเตพเดชเตเดชเตเดเตเดคเตเดคเดฒเดฟเดจเต เดถเตเดทเดตเตเด เดจเดฟเดเตเดเตพเดเตเดเต เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดฎเดพเดฑเตเดฑเดเตเดเตพ เดตเดฐเตเดคเตเดคเดพเตป เดเดดเดฟเดฏเตเด, เดเดจเตเดจเดพเตฝ เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดเตเดธเดฟเดเตเดฏเตเดทเตป เดธเดฎเดฏเด เดเดฃเตเดฏเดฎเดพเดฏเดฟ เดตเตผเดฆเตเดงเดฟเดเตเดเตเด. -
เดเดฆเตเดฏเดคเตเดคเต 100 เดฒเตเดเดจเดเตเดเตพ เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเดพเตป เดเดจเดฟเดเตเดเต 000 เดฎเดฃเดฟเดเตเดเตเตผ เดเดเตเดคเตเดคเต.
เด
เดเตเดคเตเดคเดคเดพเดฏเดฟ เดเดพเตป เดเดชเดฏเตเดเตเดคเดพเดตเดฟเดจเตเดฑเต เดฒเตเดเดจเด เดเดฃเตเดเตเดคเตเดคเตเดจเตเดจเต
- เดฎเตพเดเตเดเดฟเดคเตเดฐเตเดกเดฟเดเดเต เดเดชเดฏเตเดเดฟเดเตเดเตเดจเตเดจเดคเต เดเดฟเดฒ เดธเดฎเดฏเดเตเดเดณเดฟเตฝ เดกเตเตบเดฒเตเดกเต เดตเตเดเดคเตเดคเดฟเดฒเดพเดเตเดเตเดจเตเดจเต.
- เดจเดฟเดเตเดเตพเดเตเดเต เดนเดฌเดฑเดฟเดจเตเดฑเต เดชเตเตผเดฃเตเดฃ เดชเดคเดฟเดชเตเดชเดฒเตเดฒ, เด
เดคเดฟเดจเตเดฑเต เดฎเตเดฌเตเตฝ เดชเดคเดฟเดชเตเดชเต เดฒเดญเดฟเดเตเดเตเด.
เดเดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, เดกเตเดธเตเดเตเดเตเดชเตเดชเต เดชเดคเดฟเดชเตเดชเดฟเดฒเต เดเดฐเต เดธเดเดฏเตเดเดฟเดค เดฒเตเดเดจเดคเตเดคเดฟเดจเต 378 KB เดญเดพเดฐเดฎเตเดฃเตเดเตเดเตเดเดฟเตฝ, เดฎเตเดฌเตเตฝ เดชเดคเดฟเดชเตเดชเดฟเตฝ เด เดคเต เดเดคเดฟเดจเดเด 126 KB เดเดฃเต.
เดฐเดฃเตเดเดพเด เดชเดคเดฟเดชเตเดชเต. เดจเดฟเดฐเดตเดงเดฟ เดคเตเดฐเตเดกเตเดเตพ, เดนเดฌเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดคเดพเตฝเดเตเดเดพเดฒเดฟเด เดจเดฟเดฐเตเดงเดจเด
เดชเตเดคเตเดคเดฃเดฟเดฒเต เดฎเตพเดเตเดเดฟเดคเตเดฐเตเดกเดฟเดเดเต เดเดจเตเดจ เดตเดฟเดทเดฏเดคเตเดคเดฟเตฝ เดเดพเตป เดเดจเตเดฑเตผเดจเตเดฑเตเดฑเต เดชเดฐเดฟเดถเตเดงเดฟเดเตเดเดชเตเดชเตเตพ, multiprocessing.dummy เดเดณเตเดณ เดเดฑเตเดฑเดตเตเด เดฒเดณเดฟเดคเดฎเดพเดฏ เดเดชเตเดทเตป เดเดพเตป เดคเดฟเดฐเดเตเดเตเดเตเดคเตเดคเต, เดฎเตพเดเตเดเดฟเดคเตเดฐเตเดกเดฟเดเดเดฟเดจเตเดชเตเดชเด เดชเตเดฐเดถเตเดจเดเตเดเตพ เดชเตเดฐเดคเตเดฏเดเตเดทเดชเตเดชเตเดเตเดจเตเดจเดคเต เดเดพเตป เดถเตเดฐเดฆเตเดงเดฟเดเตเดเต.
SQLite3 เดเดจเตเดจเดฟเดฒเดงเดฟเดเด เดคเตเดฐเตเดกเตเดเดณเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดเตเดเดพเตป เดเดเตเดฐเดนเดฟเดเตเดเตเดจเตเดจเดฟเดฒเตเดฒ.
เดจเดฟเดถเตเดเดฟเดค check_same_thread=False
, เดเดจเตเดจเดพเตฝ เด เดชเดฟเดถเดเต เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดคเดฟเดฐเตเดเดพเตป เดถเตเดฐเดฎเดฟเดเตเดเตเดฎเตเดชเตเตพ, เดเดจเดฟเดเตเดเต เดชเดฐเดฟเดนเดฐเดฟเดเตเดเดพเตป เดเดดเดฟเดฏเดพเดคเตเดค เดชเดฟเดถเดเตเดเตพ เดเดฟเดฒเดชเตเดชเตเตพ เดธเดเดญเดตเดฟเดเตเดเตเดจเตเดจเต.
เด เดคเดฟเดจเดพเตฝ, เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดฒเตเดเตเดเต เดจเตเดฐเดฟเดเตเดเต เดฒเตเดเดจเดเตเดเตพ เดเตเตผเดเตเดเตเดจเตเดจเดคเต เดเดชเตเดเตเดทเดฟเดเตเดเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดจเตเดจเต, เดเดชเตเดชเด เดธเดเดฏเตเดเดฟเดค เดชเดฐเดฟเดนเดพเดฐเด เดเตผเดคเตเดคเตเดเตเดฃเตเดเต, เดซเดฏเดฒเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเตเดจเตเดจเต, เดเดพเดฐเดฃเด เดเดฐเต เดซเดฏเดฒเดฟเดฒเตเดเตเดเต เดฎเตพเดเตเดเดฟ-เดคเตเดฐเตเดกเต เดเดดเตเดคเตเดจเตเดจเดคเดฟเตฝ เดชเตเดฐเดถเตโเดจเดเตเดเดณเตเดจเตเดจเตเดฎเดฟเดฒเตเดฒ.
เดฎเตเดจเตเดจเดฟเตฝ เดเตเดเตเดคเตฝ เดคเตเดฐเตเดกเตเดเตพ เดเดชเดฏเตเดเดฟเดเตเดเดคเดฟเดจเต เดนเดฌเตเตผ เดจเดฟเดฐเตเดงเดฟเดเตเดเดพเตป เดคเตเดเดเตเดเตเดจเตเดจเต.
เดชเตเดฐเดคเตเดฏเตเดเดฟเดเตเดเตเด เดนเดฌเดฑเดฟเดฒเตเดเตเดเต เดเดเดเตเดเดพเดจเตเดณเตเดณ เดคเตเดเตเดทเตเดฃเดฎเดพเดฏ เดถเตเดฐเดฎเดเตเดเตพ เดเดคเดพเดจเตเด เดฎเดฃเดฟเดเตเดเตเดฑเตเดเตพเดเตเดเตเดณเตเดณ เดเดชเดฟ เดจเดฟเดฐเตเดงเดจเดคเตเดคเดฟเตฝ เด
เดตเดธเดพเดจเดฟเดเตเดเตเด. เด
เดคเดฟเดจเดพเตฝ เดจเดฟเดเตเดเตพ 3 เดคเตเดฐเตเดกเตเดเตพ เดฎเดพเดคเตเดฐเดฎเต เดเดชเดฏเตเดเดฟเดเตเดเดพเดตเต, เดชเดเตเดทเต เดเดคเต เดเดคเดฟเดจเดเด เดจเดฒเตเดฒเดคเดพเดฃเต, เดเดพเดฐเดฃเด 100-เดฒเดงเดฟเดเด เดฒเตเดเดจเดเตเดเตพ เดเดตเตผเดคเตเดคเดฟเดเตเดเดพเดจเตเดณเตเดณ เดธเดฎเดฏเด 26-เตฝ เดจเดฟเดจเตเดจเต 12 เดธเตเดเตเดเตปเดกเดพเดฏเดฟ เดเตเดฑเดเตเดเต.
เด เดชเดคเดฟเดชเตเดชเต เด เดธเตเดฅเดฟเดฐเดฎเดพเดฃเตเดจเตเดจเดคเต เดถเตเดฐเดฆเตเดงเดฟเดเตเดเตเดฃเตเดเดคเดพเดฃเต, เดเตเดเดพเดคเต เดกเตเตบเดฒเตเดกเตเดเตพ เดเดเดฏเตเดเตเดเดฟเดเต เดงเดพเดฐเดพเดณเด เดฒเตเดเดจเดเตเดเดณเดฟเตฝ เดตเตเดดเตเดจเตเดจเต.
async_v1.py
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 = "files\{}.json".format(i)
if os.path.isfile(currentFile):
logging.info("{} - File exists".format(i))
return 1
url = "https://m.habr.com/post/{}".format(i)
try: r = requests.get(url)
except:
with open("req_errors.txt") as file:
file.write(i)
return 2
# ะะฐะฟะธัั ะทะฐะฑะปะพะบะธัะพะฒะฐะฝะฝัั
ะทะฐะฟัะพัะพะฒ ะฝะฐ ัะตัะฒะตั
if (r.status_code == 503):
with open("Error503.txt", "a") as write_file:
write_file.write(str(i) + "n")
logging.warning('{} / 503 Error'.format(i))
# ะัะปะธ ะฟะพััะฐ ะฝะต ัััะตััะฒัะตั ะธะปะธ ะพะฝ ะฑัะป ัะบััั
if (r.status_code != 200):
logging.info("{} / {} Code".format(i, r.status_code))
return r.status_code
html_doc = r.text
soup = BeautifulSoup(html_doc, 'html5lib')
try:
author = soup.find(class_="tm-user-info__username").get_text()
timestamp = soup.find(class_='tm-user-meta__date')
timestamp = timestamp['title']
content = soup.find(id="post-content-body")
content = str(content)
title = soup.find(class_="tm-article-title__text").get_text()
tags = soup.find(class_="tm-article__tags").get_text()
tags = tags[5:]
# ะะตัะบะฐ, ััะพ ะฟะพัั ัะฒะปัะตััั ะฟะตัะตะฒะพะดะพะผ ะธะปะธ ัััะพัะธะฐะปะพะผ.
tm_tag = soup.find(class_="tm-tags tm-tags_post").get_text()
rating = soup.find(class_="tm-votes-score").get_text()
except:
author = title = tags = timestamp = tm_tag = rating = "Error"
content = "ะัะธ ะฟะฐััะธะฝะณะต ััะพะน ัััะฐะฝะธัะต ะฟัะพะธะทะพัะปะฐ ะพัะธะฑะบะฐ."
logging.warning("Error parsing - {}".format(i))
with open("Errors.txt", "a") as write_file:
write_file.write(str(i) + "n")
# ะะฐะฟะธััะฒะฐะตะผ ััะฐััั ะฒ json
try:
article = [i, timestamp, author, title, content, tm_tag, rating, tags]
with open(currentFile, "w") as write_file:
json.dump(article, write_file)
except:
print(i)
raise
if __name__ == '__main__':
if len(sys.argv) < 3:
print("ะะตะพะฑั
ะพะดะธะผั ะฟะฐัะฐะผะตััั min ะธ max. ะัะฟะพะปัะทะพะฒะฐะฝะธะต: async_v1.py 1 100")
sys.exit(1)
min = int(sys.argv[1])
max = int(sys.argv[2])
# ะัะปะธ ะฟะพัะพะบะพะฒ >3
# ัะพ ั
ะฐะฑั ะฑะฐะฝะธั ipัะฝะธะบ ะฝะฐ ะฒัะตะผั
pool = ThreadPool(3)
# ะัััะตั ะฒัะตะผะตะฝะธ, ะทะฐะฟััะบ ะฟะพัะพะบะพะฒ
start_time = datetime.now()
results = pool.map(worker, range(min, max))
# ะะพัะปะต ะทะฐะบัััะธั ะฒัะตั
ะฟะพัะพะบะพะฒ ะฟะตัะฐัะฐะตะผ ะฒัะตะผั
pool.close()
pool.join()
print(datetime.now() - start_time)
เดฎเตเดจเตเดจเดพเด เดชเดคเดฟเดชเตเดชเต. เดซเตเดจเตฝ
เดฐเดฃเตเดเดพเดฎเดคเตเดคเต เดชเดคเดฟเดชเตเดชเต เดกเตเดฌเดเตเดเต เดเตเดฏเตเดฏเตเดฎเตเดชเตเตพ, เดธเตเดฑเตเดฑเดฟเดจเตเดฑเต เดฎเตเดฌเตเตฝ เดชเดคเดฟเดชเตเดชเต เดเดเตโเดธเดธเต เดเตเดฏเตเดฏเตเดจเตเดจ เดเดฐเต เดเดชเดฟเด เดนเดฌเตโเดฑเดฟเดจเต เดชเตเดเตเดเตเดจเตเดจเต เดเดฃเตเดเตเดจเตเดจเต เดเดพเตป เดเดฃเตเดเตเดคเตเดคเดฟ. เดเดคเต เดฎเตเดฌเตเตฝ เดชเดคเดฟเดชเตเดชเดฟเดจเตเดเตเดเดพเตพ เดตเตเดเดคเตเดคเดฟเตฝ เดฒเตเดกเตเดเตเดฏเตเดฏเตเดจเตเดจเต, เดเดพเดฐเดฃเด เดเดคเต json เดฎเดพเดคเตเดฐเดฎเดพเดฃเต, เด เดคเต เดชเดพเดดเตโเดธเต เดเตเดฏเตเดฏเตเดฃเตเดเดคเดฟเดฒเตเดฒ. เด เดตเดธเดพเดจเด, เดเดจเตเดฑเต เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดตเตเดฃเตเดเตเด เดเดดเตเดคเดพเตป เดเดพเตป เดคเตเดฐเตเดฎเดพเดจเดฟเดเตเดเต.
เด
เดคเดฟเดจเดพเตฝ, เดเดฃเตเดเตเดคเตเดคเดฟ
async_v2.py
import requests
import os, sys
import json
from multiprocessing.dummy import Pool as ThreadPool
from datetime import datetime
import logging
def worker(i):
currentFile = "files\{}.json".format(i)
if os.path.isfile(currentFile):
logging.info("{} - File exists".format(i))
return 1
url = "https://m.habr.com/kek/v1/articles/{}/?fl=ru%2Cen&hl=ru".format(i)
try:
r = requests.get(url)
if r.status_code == 503:
logging.critical("503 Error")
return 503
except:
with open("req_errors.txt") 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, "w") as write_file:
json.dump(data, write_file)
if __name__ == '__main__':
if len(sys.argv) < 3:
print("ะะตะพะฑั
ะพะดะธะผั ะฟะฐัะฐะผะตััั min ะธ max. ะัะฟะพะปัะทะพะฒะฐะฝะธะต: asyc.py 1 100")
sys.exit(1)
min = int(sys.argv[1])
max = int(sys.argv[2])
# ะัะปะธ ะฟะพัะพะบะพะฒ >3
# ัะพ ั
ะฐะฑั ะฑะฐะฝะธั ipัะฝะธะบ ะฝะฐ ะฒัะตะผั
pool = ThreadPool(3)
# ะัััะตั ะฒัะตะผะตะฝะธ, ะทะฐะฟััะบ ะฟะพัะพะบะพะฒ
start_time = datetime.now()
results = pool.map(worker, range(min, max))
# ะะพัะปะต ะทะฐะบัััะธั ะฒัะตั
ะฟะพัะพะบะพะฒ ะฟะตัะฐัะฐะตะผ ะฒัะตะผั
pool.close()
pool.join()
print(datetime.now() - start_time)
เดฒเตเดเดจเดตเตเดฎเดพเดฏเตเด เด เดคเต เดเดดเตเดคเดฟเดฏ เดฐเดเดฏเดฟเดคเดพเดตเตเดฎเดพเดฏเตเด เดฌเดจเตเดงเดชเตเดชเตเดเตเด เดซเตเตฝเดกเตเดเตพ เดเดคเดฟเตฝ เด เดเดเตเดเดฟเดฏเดฟเดฐเดฟเดเตเดเตเดจเตเดจเต.
API.png
เดเดฐเต เดฒเตเดเดจเดคเตเดคเดฟเดจเตเดฑเตเดฏเตเด เดชเตเตผเดฃเตเดฃเดฎเดพเดฏ json เดเดพเตป เดเดชเตเดเตเดทเดฟเดเตเดเดฟเดฒเตเดฒ, เดชเดเตเดทเต เดเดจเดฟเดเตเดเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดซเตเตฝเดกเตเดเตพ เดฎเดพเดคเตเดฐเด เดธเดเดฐเดเตเดทเดฟเดเตเดเต:
- id
- เดเตเดฏเตเดเตเดเตเดฑเดฟเดฏเตฝ เดเดฃเต
- เดธเดฎเดฏเด_เดชเตเดฐเดธเดฟเดฆเตเดงเตเดเดฐเดฟเดเตเดเดคเต
- เดคเดฒเดเตเดเตเดเตเดเต
- เดเดณเตเดณเดเดเตเดเด
- เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเดณเตเดเต_เดเดฃเตเดฃเด
- เดฒเตเดเดจเด เดเดดเตเดคเดฟเดฏ เดญเดพเดทเดฏเดพเดฃเต lang. เดเดคเตเดตเดฐเต en, ru เดเดจเตเดจเดฟเดต เดฎเดพเดคเตเดฐเดฎเต เดเดณเตเดณเต.
- tags_string - เดชเตเดธเตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดเดฒเตเดฒเดพ เดเดพเดเตเดเดณเตเด
- เดตเดพเดฏเดจ_เดเดฃเตเดฃเด
- เดฐเดเดฏเดฟเดคเดพเดตเต
- เดธเตเดเตเตผ - เดฒเตเดเดจ เดฑเตเดฑเตเดฑเดฟเดเดเต.
เด เดเตเดเดจเต, API เดเดชเดฏเตเดเดฟเดเตเดเต, เดเดพเตป เดธเตเดเตเดฐเดฟเดชเตเดฑเตเดฑเต เดเดเตเดธเดฟเดเตเดฏเตเดทเตป เดธเดฎเดฏเด 8 url-เดจเต 100 เดธเตเดเตเดเตปเดกเดพเดฏเดฟ เดเตเดฑเดเตเดเต.
เดเดเตเดเตพเดเตเดเต เดเดตเดถเตเดฏเดฎเดพเดฏ เดกเดพเดฑเตเดฑ เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดค เดถเตเดทเด, เดเดเตเดเตพ เด เดคเต เดชเตเดฐเตเดธเดธเตเดธเต เดเตเดฏเตเดฏเตเดเดฏเตเด เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเตฝ เดจเตฝเดเตเดเดฏเตเด เดตเตเดฃเด. เดเดคเดฟเดฒเตเด เดเดจเดฟเดเตเดเต เดชเตเดฐเดถเตโเดจเดเตเดเดณเตเดจเตเดจเตเด เดเดฃเตเดเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดฒเตเดฒ:
parser.py
import json
import sqlite3
import logging
from datetime import datetime
def parser(min, max):
conn = sqlite3.connect('habr.db')
c = conn.cursor()
c.execute('PRAGMA encoding = "UTF-8"')
c.execute('PRAGMA synchronous = 0') # ะัะบะปััะฐะตะผ ะฟะพะดัะฒะตัะถะดะตะฝะธะต ะทะฐะฟะธัะธ, ัะฐะบ ัะบะพัะพััั ัะฒะตะปะธัะธะฒะฐะตััั ะฒ ัะฐะทั.
c.execute("CREATE TABLE IF NOT EXISTS articles(id INTEGER, time_published TEXT, author TEXT, title TEXT, content TEXT,
lang TEXT, comments_count INTEGER, reading_count INTEGER, score INTEGER, is_tutorial INTEGER, tags_string TEXT)")
try:
for i in range(min, max):
try:
filename = "files\{}.json".format(i)
f = open(filename)
data = json.load(f)
(id, is_tutorial, time_published, title, content, comments_count, lang,
tags_string, reading_count, author, score) = data
# ะ ะฐะดะธ ะปัััะตะน ัะธัะฐะตะผะพััะธ ะฑะฐะทั ะผะพะถะฝะพ ะฟัะตะฝะตะฑัะตัั ัะธัะฐะตะผะพัััั ะบะพะดะฐ. ะะปะธ ะฝะตั?
# ะัะปะธ ะฒะฐะผ ัะฐะบ ะบะฐะถะตััั, ะผะพะถะฝะพ ะฟัะพััะพ ะทะฐะผะตะฝะธัั ะบะพััะตะถ ะฐัะณัะผะตะฝัะพะผ data. ะ ะตัะฐัั ะฒะฐะผ.
c.execute('INSERT INTO articles VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', (id, time_published, author,
title, content, lang,
comments_count, reading_count,
score, is_tutorial,
tags_string))
f.close()
except IOError:
logging.info('FileNotExists')
continue
finally:
conn.commit()
start_time = datetime.now()
parser(490000, 490918)
print(datetime.now() - start_time)
เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเตพ
เดถเดฐเดฟ, เดชเดฐเดฎเตเดชเดฐเดพเดเดคเดฎเดพเดฏเดฟ, เดเดเตเดตเดฟเตฝ, เดจเดฟเดเตเดเตพเดเตเดเต เดกเดพเดฑเตเดฑเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดเดฟเดฒ เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเตพ เดตเตเตผเดคเดฟเดฐเดฟเดเตเดเตเดเตเดเตเดเดพเตป เดเดดเดฟเดฏเตเด:
- เดชเตเดฐเดคเตเดเตเดทเดฟเดเตเด 490 เดกเตเตบเดฒเตเดกเตเดเดณเดฟเตฝ 406 เดฒเตเดเดจเดเตเดเตพ เดฎเดพเดคเตเดฐเดฎเดพเดฃเต เดกเตเตบเดฒเตเดกเต เดเตเดฏเตเดฏเดชเตเดชเตเดเตเดเดคเต. เดนเดฌเตเดฐเตเดฏเตเดเตเดเตเดฑเดฟเดเตเดเตเดณเตเดณ เดฒเตเดเดจเดเตเดเดณเดฟเตฝ เดชเดเตเดคเดฟเดฏเดฟเดฒเตเดฑเตเดฏเตเด (228) เดฎเดฑเดฏเตเดเตเดเตเดเดฏเต เดเดฒเตเดฒเดพเดคเดพเดเตเดเตเดเดฏเต เดเตเดฏเตเดคเต.
- เดเดเดฆเตเดถเด เด เดฐ เดฆเดถเดฒเดเตเดทเด เดฒเตเดเดจเดเตเดเตพ เด เดเดเตเดเตเดจเตเดจ เดฎเตเดดเตเดตเตป เดกเดพเดฑเตเดฑเดพเดฌเตเดธเดฟเดจเตเดฑเตเดฏเตเด เดญเดพเดฐเด 2.95 GB เดเดฃเต. เดเดเดชเตเดฐเดธเต เดเตเดฏเตเดค เดฐเตเดชเดคเตเดคเดฟเตฝ - 495 MB.
- เดฎเตเดคเตเดคเดคเตเดคเดฟเตฝ, 37804 เดเดณเตเดเตพ เดนเดฌเตเดฐเตเดฏเตเดเต เดฐเดเดฏเดฟเดคเดพเดเตเดเดณเดพเดฃเต. เด เดธเตเดฅเดฟเดคเดฟเดตเดฟเดตเดฐเดเตเดเดฃเดเตเดเตเดเตพ เดคเดคเตเดธเดฎเดฏ เดชเตเดธเตเดฑเตเดฑเตเดเดณเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณเดคเดพเดฃเตเดจเตเดจเต เดเดพเตป เดจเดฟเดเตเดเดณเต เดเตผเดฎเตเดฎเดฟเดชเตเดชเดฟเดเตเดเตเดจเตเดจเต.
- เดนเดฌเตเดฐเตเดฏเดฟเดฒเต เดเดฑเตเดฑเดตเตเด เดเตฝเดชเตเดชเดพเดฆเดจเดเตเดทเดฎเดฎเดพเดฏ เดฐเดเดฏเดฟเดคเดพเดตเต -
เด เดฒเดฟเดธเตผ - 8774 เดฒเตเดเดจเดเตเดเตพ. เดเดฑเตเดฑเดตเตเด เดฎเดฟเดเดเตเด เดฑเตเดฑเตเดฑเตเดเตเดฏเตเดค เดฒเตเดเดจเด - 1448 เดชเตเดฒเดธเตเดเดฑเตเดฑเดตเตเด เดเตเดเตเดคเตฝ เดตเดพเดฏเดฟเดเตเดเดชเตเดชเตเดเตเด เดฒเตเดเดจเด โ 1660841 เดเดพเดดเตเดเดเตพเดเดฑเตเดฑเดตเตเด เดเตเดเตเดคเตฝ เดเตผเดเตเด เดเตเดฏเตเดฏเดชเตเดชเตเดเตเด เดฒเตเดเดจเด - 2444 เด เดญเดฟเดชเตเดฐเดพเดฏเดเตเดเตพ
เดจเดจเตเดจเดพเดฏเดฟ, เดฌเดฒเดฟ เดฐเตเดชเดคเตเดคเดฟเตฝเดฎเดฟเดเดเตเด 15 เดเดดเตเดคเตเดคเตเดเดพเตผ
เดฑเตเดฑเตเดฑเดฟเดเดเต เดชเตเดฐเดเดพเดฐเด เดฎเดฟเดเดเตเด 15
เดฎเดฟเดเดเตเด 15 เดตเดพเดฏเดฟเดเตเดเตเด
เดฎเดฟเดเดเตเด 15 เดเตผเดเตเด เดเตเดฏเตเดคเต
เด
เดตเดฒเดเดฌเด: www.habr.com