study sources
2 subscribers
1 photo
14 links
SQL.
JavaScript.
Python.
C#.
Download Telegram
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)
готовый класс
Вместо того, чтобы юзать всеми любимый джангорест, я юзаю фласк
Как работают SQL Joins: шпаргалка:
SQL Join используется для поиска информации в базах данных по заранее определенным критериям. В частности, Join отвечает за объединение нескольких групп данных в единый поток информации.

🔹INNER JOIN возвращает совпадающие строки в обеих таблицах

🔹LEFT JOIN возвращает все записи из левой таблицы и соответствующие записи из правой

🔹RIGHT JOIN возвращает все записи из правой таблицы и соответствующие записи из левой

🔹FULL OUTER JOIN возвращает все записи, в которых есть совпадения, в левой или правой таблице
Что такое SOLID?

SOLID — это акроним принципов объектно-ориентированного программирования, которые помогают писать гибкий, поддерживаемый и расширяемый код:

S — Single-responsibility principle (Принцип единственной ответственности).
O — Open-closed principle (Принцип открытости/закрытости).
L — Liskov substitution principle (Принцип подстановки Лисков).
I — Interface segregation principle (Принцип разделения интерфейса).
D — Dependency Inversion Principle (Принцип инверсии зависимостей).

Основные идеи SOLID:
— Каждый класс должен нести единственную ответственность.
— Классы должны быть открыты для расширения, но закрыты для модификации.
— Подклассы должны быть взаимозаменяемы со своими базовыми классами.
— Множество узких интерфейсов лучше, чем один широкий.
— Зависимости должны строиться на абстракциях, а не конкретных классах.
P. S.
Лена, я не занимался, честно, ну только если чуть чуть
Короче, 4 причины почему не стоит использовать конструкторы по типу Тильда.

Ну первое, это грёбаные конструкторы, на которых ты сможешь сделать только базовый интернет магазин или лендинг, без динамической подгрузки, то есть если у тебя более 100 товаров, не вздумай юзать конструкторы.

Второе, это невозможность сделать профиль с персонализацией, отслеживанием чего-либо и т.п. (Я сжу это по Тильде, ибо это самый популярный конструктор, не путать wordpress с ними).

Третье, они не любят высоконагруженные проекты, просто напросто не выдерживают и падают.

Четвёртое, если вы разрабатываете социальные сети или сложные сервисы, тут я не смогу чего-то сказать, если человек выбрал конструктор для этого, я просто похлопаю
Если юзаешь конструкторы на постоянку, пипка отсохнет
👍2
Видос попался, вкратце, скилбокс, яндекс, м.видео и там парочку юзают оказывается тильду.

То есть огромный интернет магазин, очень большая компания в которой в основном микро сервисы и крупнейшая компания с курсами по программированию юзают конструкторы?!

Просто промолчу
1
🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas
Я закончил изучение по статьям питона
🔥1