เจจเจฎเจธเจเจพเจฐ. เจเจธ เจจเฉเฉฐ เจฒเจฟเจเฉ เจนเฉเจ 2 เจธเจพเจฒ เจนเฉ เจเจ เจนเจจเฅค
เจเจฆเฉเจ เจฎเฉเจ เจนเจพเจฌเจฐ เจฆเฉ เจเฉฑเจ เจเจพเจชเฉ เจฒเฉเจฃเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจธเฉ, เจฎเฉเจ เจเฉฑเจ เจชเจพเจฐเจธเจฐ เจฒเจฟเจเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจเฉ เจฒเฉเจเจเจพเจ เจฆเฉ เจธเจพเจฐเฉ เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเจฐเฉเจเจพเฅค เจเจน เจเจฟเจตเฉเจ เจนเฉเจเจ เจ เจคเฉ เจฎเฉเจจเฉเฉฐ เจเจฟเจนเฉเฉเจเจ เจเจฒเจคเฉเจเจ เจฆเจพ เจธเจพเจนเจฎเจฃเจพ เจเจฐเจจเจพ เจชเจฟเจ - เจคเฉเจธเฉเจ เจเฉฑเจ เจฆเฉ เจนเฉเจ เจพเจ เจชเฉเฉเจน เจธเจเจฆเฉ เจนเฉ.
TLDR-
เจชเจพเจฐเจธเจฐ เจฆเจพ เจชเจนเจฟเจฒเจพ เจธเฉฐเจธเจเจฐเจฃเฅค เจเฉฑเจ เจงเจพเจเจพ, เจฌเจนเฉเจค เจธเจพเจฐเฉเจเจ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ
เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฒเจ, เจฎเฉเจ เจเฉฑเจ เจธเจเฉเจฐเจฟเจชเจ เจชเฉเจฐเฉเจเฉเจเจพเจเจช เจฌเจฃเจพเจเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ, เจเจฟเจธ เจตเจฟเฉฑเจ เจฒเฉเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจ เจคเฉ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจฐเฉฑเจเฉ เจเจพเจฃ 'เจคเฉ เจคเฉเจฐเฉฐเจค เจชเจพเจฐเจธ เจเฉเจคเจพ เจเจพเจตเฉเจเจพเฅค เจฆเฉ เจตเจพเจฐ เจธเฉเจเฉ เจฌเจฟเจจเจพเจ, เจฎเฉเจ 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 เจนเฉเฅค
เจฆเฉเจเจพ เจธเฉฐเจธเจเจฐเจฃ. เจฌเจนเฉเจค เจธเจพเจฐเฉ เจงเจพเจเฉ, เจนเจฌเจฐ เจคเฉเจ เจ เจธเจฅเจพเจ เจชเจพเจฌเฉฐเจฆเฉ
เจเจฆเฉเจ เจฎเฉเจ python เจตเจฟเฉฑเจ เจฎเจฒเจเฉเจฅเฉเจฐเฉเจกเจฟเฉฐเจ เจฆเฉ เจตเจฟเจธเจผเฉ 'เจคเฉ เจเฉฐเจเจฐเจจเฉเจ เจฆเฉ เจเฉเจ เจเฉเจคเฉ, เจคเจพเจ เจฎเฉเจ 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)
เจคเฉเจเจพ เจธเฉฐเจธเจเจฐเจฃเฅค เจ เฉฐเจคเจฟเจฎ
เจฆเฉเจเฉ เจธเฉฐเจธเจเจฐเจฃ เจจเฉเฉฐ เจกเฉเจฌเฉฑเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ, เจฎเฉเจ เจเฉเจเจฟเจ เจเจฟ Habr, เจ เจเจพเจจเจ, เจเฉฑเจ API เจนเฉ เจเฉ เจธเจพเจเจ เจฆเจพ เจฎเฉเจฌเจพเจเจฒ เจธเฉฐเจธเจเจฐเจฃ เจเจเจธเฉเจธ เจเจฐเจฆเจพ เจนเฉ. เจเจน เจฎเฉเจฌเจพเจเจฒ เจธเฉฐเจธเจเจฐเจฃ เจจเจพเจฒเฉเจ เจคเฉเจเจผเฉ เจจเจพเจฒ เจฒเฉเจก เจนเฉเฉฐเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจเจน เจธเจฟเจฐเจซเจผ 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
เจฎเฉเจ เจนเจฐเฉเจ เจฒเฉเจ เจฆเฉ เจชเฉเจฐเฉ เจเฉเจธเจจ เจจเฉเฉฐ เจกเฉฐเจช เจจเจนเฉเจ เจเฉเจคเจพ, เจชเจฐ เจธเจฟเจฐเจซ เจเจนเจจเจพเจ เจเฉเจคเจฐเจพเจ เจจเฉเฉฐ เจธเฉเจฐเฉฑเจเจฟเจ เจค เจเฉเจคเจพ เจนเฉ เจเจฟเจจเฉเจนเจพเจ เจฆเฉ เจฎเฉเจจเฉเฉฐ เจฒเฉเฉ เจนเฉ:
- id
- is_tutorial
- เจธเจฎเจพเจ_เจชเฉเจฐเจเจพเจธเจผเจฟเจค
- เจฆเจพ เจธเจฟเจฐเจฒเฉเจ
- เจธเจฎเฉฑเจเจฐเฉ เจจเฉเฉฐ
- เจเจฟเฉฑเจชเจฃเฉเจเจ_เจเจฟเจฃเจคเฉ
- lang เจเจน เจญเจพเจธเจผเจพ เจนเฉ เจเจฟเจธ เจตเจฟเฉฑเจ เจฒเฉเจ เจฒเจฟเจเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจนเฉเจฃ เจคเฉฑเจ, เจเจธ เจตเจฟเฉฑเจ เจธเจฟเจฐเจซ en เจ เจคเฉ ru เจนเฉเฅค
- tags_string - เจชเฉเจธเจ เจคเฉเจ เจธเจพเจฐเฉ เจเฉเจ
- เจชเฉเฉเจนเจจ_เจเจฟเจฃเจคเฉ
- เจฒเฉเจเจ
- เจธเจเฉเจฐ - เจฒเฉเจ เจฐเฉเจเจฟเฉฐเจเฅค
เจเจธ เจคเจฐเฉเจนเจพเจ, API เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉเจ, เจฎเฉเจ เจธเจเฉเจฐเจฟเจชเจ เจเจเจเจผเฉเจเจฟเจเจธเจผเจจ เจเจพเจเจฎ เจจเฉเฉฐ 8 เจธเจเจฟเฉฐเจ เจชเฉเจฐเจคเฉ 100 url เจคเฉฑเจ เจเจเจพ เจฆเจฟเฉฑเจคเจพ เจนเฉเฅค
เจธเจพเจจเฉเฉฐ เจฒเฉเฉเฉเจเจฆเจพ เจกเจพเจเจพ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจคเฉเจ เจฌเจพเจ เจฆ, เจธเจพเจจเฉเฉฐ เจเจธ 'เจคเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจจ เจ เจคเฉ เจเจธเจจเฉเฉฐ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจฆเจพเจเจฒ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฉฐเจฆเฉ เจนเฉเฅค เจฎเฉเจจเฉเฉฐ เจเจธ เจจเจพเจฒ เจตเฉ เจเฉเจ เจธเจฎเฉฑเจธเจฟเจ เจจเจนเฉเจ เจธเฉ:
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