Пытаюсь понять, зачем вместо "and" и "or", решили использовать "&&" и "||".
While(); do...while(); Вроде два одинаковых цикла, но многие называют второй, женским.
Полиморфизм, тоже самое наследование с переопределением методов, в чем прикол.
А ещё, у класса методы, а не функции!
А ещё, у класса методы, а не функции!
БД- База Данных.
ORM - технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
А я нихрена сегодня не изучил.
Зато поработал с ORM, написал модельку таблицы для котиков.
Отдельный класс, который редактирует, удаляет, добавляет данные о котах. Но сделал не тяп ляп, а проверку всех полученных данных от пользователя, работа с бд только через try/except, чтобы при возникновении ошибки откатить бд на один коммит.
Думаю GUI повесить или на fastapi + vue.js что нибудь сделать с этим, развить так сказать.
Пет проект придумал, осталось реализовать его до конца
Библиотеку для модели использовал SQLALCHEMY.
СУБД postgreSQL (использую почти для всех пет проектов).
ORM - технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
А я нихрена сегодня не изучил.
Зато поработал с ORM, написал модельку таблицы для котиков.
Отдельный класс, который редактирует, удаляет, добавляет данные о котах. Но сделал не тяп ляп, а проверку всех полученных данных от пользователя, работа с бд только через try/except, чтобы при возникновении ошибки откатить бд на один коммит.
Думаю GUI повесить или на fastapi + vue.js что нибудь сделать с этим, развить так сказать.
Пет проект придумал, осталось реализовать его до конца
Библиотеку для модели использовал SQLALCHEMY.
СУБД postgreSQL (использую почти для всех пет проектов).
DRY — "Не повторяйся".
Это один из основных принципов ООП, есть ещё как минимум 3 — KISS, SOLID, REST.
Как можно соблюдать принцип DRY? Очень просто, просто использовать тоже самое наследование.
Я пока что тупой, не знаю что за остальные три принципа.
Это один из основных принципов ООП, есть ещё как минимум 3 — KISS, SOLID, REST.
Как можно соблюдать принцип DRY? Очень просто, просто использовать тоже самое наследование.
Я пока что тупой, не знаю что за остальные три принципа.
"При создании класса, мы создаём пространство имён" - или же это просто локальные переменные, которые доступны внутри класса и его методов.
class Point:
color = 'red'
circle = 2
print(Point.color)
Point.color = 'blue'
print(Point.color)
Этот код сначала выводит значение переменной color, класса Point, потом меняет и выводит опять.
import os
import requests
from urllib.request import urlopen
from lxml import etree
class Functional:
img = "/html/body/div/div[1]/div/main/header/img"
word = "/html/body/div/div[1]/div/main/div[1]/div[1]/div[2]/b"
translate = "/html/body/div/div[1]/div/main/div[1]/div[1]/div[1]/span"
transcription = "/html/body/div/div[1]/div/main/div[1]/div[2]/div[2]/b"
headers = {'Content-Type': 'text/html',}
BASEDIR = os.path.abspath(os.path.dirname(__file__))
def __init__(self, link, path_to_folder=None) -> None:
self.response = requests.get(link, headers=self.headers)
self.path_to_folder = path_to_folder
def get_data(self):
with open("index.html", "w", encoding="utf-8") as file:
file.write(self.response.text)
local = os.path.join(self.BASEDIR, "index.html")
response = urlopen(local)
htmlparser = etree.HTMLParser()
tree = etree.parse(response, htmlparser)
# print(tree.xpath(self.word))
def __saveData(self):
...
def __saveImg(self):
...
def correct_str(self, s):
return s.encode('utf-8').decode('ascii', 'ignore').strip()
if __name__ == "__main__":
a = Functional(link="https://www.toboapp.com/word/korean/russian/yeou-604/")
a.get_data()
import os
import requests
import bs4
from lxml import etree
import csv
class Functional:
img = "/html/body/div/div[1]/div/main/header/img"
word = "/html/body/div/div[1]/div/main/div[1]/div[1]/div[2]/b"
translate = "/html/body/div/div[1]/div/main/div[1]/div[1]/div[1]/span"
transcription = "/html/body/div/div[1]/div/main/div[1]/div[2]/div[2]/b"
headers = {'Content-Type': 'text/html'}
BASEDIR = os.path.abspath(os.path.dirname(__file__))
def __init__(self, link, path_to_folder=BASEDIR) -> None:
self.response = requests.get(link, headers=self.headers)
self.path_to_folder = path_to_folder
def get_data(self):
result = []
soup = bs4.BeautifulSoup(self.response.text, features="lxml")
dom = etree.HTML(str(soup))
word = dom.xpath(self.word)[0].text
translate = dom.xpath(self.translate)[0].text
transcription = dom.xpath(self.transcription)[0].text
img = soup.find("img")["src"]
result.append(
[word, transcription, translate]
)
Functional.save_data(self, result)
# Functional.save_img(self, img)
def save_data(self, result):
with open("test.csv", "r", encoding="utf-8") as file:
if not file.read():
print(False)
with open("test.csv", "w", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(
(
"Слово",
"Транскрипция",
"Перевод"
)
)
writer.writerows(
result
)
else:
print(True)
with open("test.csv", "a", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerows(
result
)
if __name__ == "__main__":
a = Functional(link="https://www.toboapp.com/word/korean/russian/kokkiri-846/")
a.get_data()
Осталось сохранять фото, сделать выбор директории и на это всё посадить GUI интерфейс
class Functional:
img = "/html/body/div/div[1]/div/main/header/img"
word = "/html/body/div/div[1]/div/main/div[1]/div[1]/div[2]/b"
translate = "/html/body/div/div[1]/div/main/div[1]/div[1]/div[1]/span"
transcription = "/html/body/div/div[1]/div/main/div[1]/div[2]/div[2]/b"
headers = {'Content-Type': 'text/html'}
BASEDIR = os.path.abspath(os.path.dirname(__file__))
def __init__(self, link, img_name, path_to_folder=BASEDIR) -> None:
self.response = requests.get(link, headers=self.headers)
self.path_to_folder = path_to_folder
self.img_name = img_name
def get_data(self):
result = []
soup = bs4.BeautifulSoup(self.response.text, features="lxml")
dom = etree.HTML(str(soup))
word = dom.xpath(self.word)[0].text
translate = dom.xpath(self.translate)[0].text
transcription = dom.xpath(self.transcription)[0].text
element = dom.xpath(self.img)[0]
img = etree.tostring(element, encoding='utf-8').decode('utf-8')
s = bs4.BeautifulSoup(img, 'html.parser')
img = s.img['src']
result.append(
[word, transcription, translate]
)
Functional.save_data(self, result)
Functional.save_img(self, img)
def save_data(self, result):
with open("test.csv", "r", encoding="utf-8") as file:
if not file.read():
print(False)
with open("test.csv", "w", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(
(
"Слово",
"Транскрипция",
"Перевод"
)
)
writer.writerows(
result
)
else:
print(True)
with open("test.csv", "a", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerows(
result
)
def save_img(self, src_img):
response = requests.get(src_img, stream=True)
with open(f"{self.img_name}.svg", 'wb') as file:
file.write(response.content)