Merge remote-tracking branch 'origin/master'

This commit is contained in:
Sklvd
2023-04-20 10:00:18 +03:00
66 changed files with 1163 additions and 42 deletions
+1 -1
View File
@@ -4,7 +4,7 @@
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" /> <excludeFolder url="file://$MODULE_DIR$/venv" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="jdk" jdkName="Python 3.9 (venv)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
</module> </module>
+1 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (venv)" project-jdk-type="Python SDK" />
</project> </project>
File diff suppressed because one or more lines are too long
@@ -0,0 +1,4 @@
<changelist name="Uncommitted_changes_before_Update_at_15_02_2023_1_03_[Changes]" date="1676412217607" recycled="false" toDelete="true">
<option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_15_02_2023_1_03_[Changes]/shelved.patch" />
<option name="DESCRIPTION" value="Uncommitted changes before Update at 15.02.2023 1:03 [Changes]" />
</changelist>
+82 -7
View File
@@ -4,8 +4,12 @@
<option name="autoReloadType" value="SELECTIVE" /> <option name="autoReloadType" value="SELECTIVE" />
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="e5615680-c090-497d-a104-1337ed85f850" name="Changes" comment="parser"> <list default="true" id="e5615680-c090-497d-a104-1337ed85f850" name="Changes" comment="Дз парсинг">
<change afterPath="$PROJECT_DIR$/Задания/task1/Prokhorova/tgbot.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/22712.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/22712.iml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Задания/task1/Prokhorova/dz.py" beforeDir="false" afterPath="$PROJECT_DIR$/Задания/task1/Prokhorova/dz.py" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -20,7 +24,7 @@
</option> </option>
</component> </component>
<component name="Git.Rebase.Settings"> <component name="Git.Rebase.Settings">
<option name="NEW_BASE" value="master" /> <option name="NEW_BASE" value="origin/master" />
</component> </component>
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
@@ -35,12 +39,45 @@
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<<<<<<< HEAD
<component name="PropertiesComponent">{
&quot;keyToString&quot;: {
&quot;last_opened_file_path&quot;: &quot;C:/Users/Honor/c22712&quot;
}
}</component>
<component name="RunManager" selected="Python.zaparsil">
=======
<component name="PropertiesComponent"><![CDATA[{ <component name="PropertiesComponent"><![CDATA[{
"keyToString": { "keyToString": {
"last_opened_file_path": "C:/Users/71332/PycharmProjects/c22712" "RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"last_opened_file_path": "C:/Users/Honor/Desktop/учеба/прога/c22712",
"settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable"
} }
}]]></component> }]]></component>
<component name="RunManager" selected="Python.zaparsil"> <component name="RunManager" selected="Python.tgbot">
<configuration name="dz" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="22712" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="C:\Users\Honor\PycharmProjects\pythonProject\venv\Scripts\python.exe" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/Задания/task1/Prokhorova" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/Задания/task1/Prokhorova/dz.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
>>>>>>> d1c29f6 (телеграмм бот)
<configuration name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true"> <configuration name="main" type="PythonConfigurationType" factoryName="Python" nameIsGenerated="true">
<module name="22712" /> <module name="22712" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@@ -63,6 +100,27 @@
<option name="INPUT_FILE" value="" /> <option name="INPUT_FILE" value="" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
<configuration name="tgbot" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="22712" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="C:\Users\Honor\PycharmProjects\pythonProject\venv\Scripts\python.exe" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../тг бот" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/../тг бот/tgbot.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="zaparsil" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true"> <configuration name="zaparsil" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="22712" /> <module name="22712" />
<option name="INTERPRETER_OPTIONS" value="" /> <option name="INTERPRETER_OPTIONS" value="" />
@@ -86,6 +144,8 @@
</configuration> </configuration>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="Python.tgbot" />
<item itemvalue="Python.dz" />
<item itemvalue="Python.zaparsil" /> <item itemvalue="Python.zaparsil" />
</list> </list>
</recent_temporary> </recent_temporary>
@@ -142,7 +202,21 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1679839777822</updated> <updated>1679839777822</updated>
</task> </task>
<option name="localTasksCounter" value="7" /> <task id="LOCAL-00007" summary="Дз парсинг">
<created>1680206771744</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1680206771744</updated>
</task>
<task id="LOCAL-00008" summary="Дз парсинг">
<created>1680207517708</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1680207517708</updated>
</task>
<option name="localTasksCounter" value="9" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@@ -162,14 +236,15 @@
<component name="VcsManagerConfiguration"> <component name="VcsManagerConfiguration">
<MESSAGE value="Первый коммит" /> <MESSAGE value="Первый коммит" />
<MESSAGE value="parser" /> <MESSAGE value="parser" />
<option name="LAST_COMMIT_MESSAGE" value="parser" /> <MESSAGE value="Дз парсинг" />
<option name="LAST_COMMIT_MESSAGE" value="Дз парсинг" />
</component> </component>
<component name="XDebuggerManager"> <component name="XDebuggerManager">
<breakpoint-manager> <breakpoint-manager>
<breakpoints> <breakpoints>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line"> <line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/main.py</url> <url>file://$PROJECT_DIR$/main.py</url>
<line>8</line> <line>5</line>
<option name="timeStamp" value="1" /> <option name="timeStamp" value="1" />
</line-breakpoint> </line-breakpoint>
</breakpoints> </breakpoints>
+44
View File
@@ -0,0 +1,44 @@
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from time import sleep
import psycopg2
s = Service("C:\Driver\chromedriver.exe")
browser = webdriver.Chrome(service=s)
browser.get("https://drivenew.ru/layfkhaki/besplatno/top-10-vinodelcheskikh-khozyaystv-krasnodarskogo-kraya/")
sleep(1)
html_text = browser.page_source
soup = BeautifulSoup(html_text, "lxml")
name = soup.find_all("h2")
contacts = soup.find_all("div", class_="article-info")
address = []
number = []
for element in contacts:
a = element.find_all("p")[1]
n = element.find_all("p")[2]
address.append(a)
number.append(n)
pic = soup.find("div", class_="white-bg white-bg-text box-15-new").find_all("img")
picture = []
url = "https://drivenew.ru"
for i in pic:
p = url + i.attrs.get("src")
picture.append(p)
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4t5')
cursor = connection.cursor()
create = """create table Distilleries
(id serial primary key , Name varchar(100), Place varchar(200), Contacts varchar(100), ImageLink varchar(80));"""
cursor.execute(create)
connection.commit()
for j in range(10):
qwery = f"insert into public.distilleries(Name, Place, Contacts, ImageLink) values('{name[j].text.strip()}', '{address[j].text.strip()}', '{number[j].text.strip()}', '{picture[j]}')"
cursor.execute(qwery)
connection.commit()
cursor.execute('select * from Distilleries')
print(cursor.fetchall())
cursor.close()
connection.close()
@@ -0,0 +1 @@
https://github.com/ada-dmitry/PyProg_ada/tree/master/Python/TeleBot
+44
View File
@@ -0,0 +1,44 @@
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from time import sleep
import psycopg2
s = Service("C:\Driver\chromedriver.exe")
browser = webdriver.Chrome(service=s)
browser.get("https://drivenew.ru/layfkhaki/besplatno/top-10-vinodelcheskikh-khozyaystv-krasnodarskogo-kraya/")
sleep(1)
html_text = browser.page_source
soup = BeautifulSoup(html_text, "lxml")
name = soup.find_all("h2")
contacts = soup.find_all("div", class_="article-info")
address = []
number = []
for element in contacts:
a = element.find_all("p")[1]
n = element.find_all("p")[2]
address.append(a)
number.append(n)
pic = soup.find("div", class_="white-bg white-bg-text box-15-new").find_all("img")
picture = []
url = "https://drivenew.ru"
for i in pic:
p = url + i.attrs.get("src")
picture.append(p)
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4t5')
cursor = connection.cursor()
create = """create table Distilleries
(id serial primary key , Name varchar(100), Place varchar(200), Contacts varchar(100), ImageLink varchar(80));"""
cursor.execute(create)
connection.commit()
for j in range(10):
qwery = f"insert into public.distilleries(Name, Place, Contacts, ImageLink) values('{name[j].text.strip()}', '{address[j].text.strip()}', '{number[j].text.strip()}', '{picture[j]}')"
cursor.execute(qwery)
connection.commit()
cursor.execute('select * from Distilleries')
print(cursor.fetchall())
cursor.close()
connection.close()
+37
View File
@@ -0,0 +1,37 @@
import telebot
import psycopg2
from telebot import types
# Создаем экземпляр бота
bot = telebot.TeleBot('5898574743:AAF2y_y3U2IfWwQVJ_lF6mmiDPlx1YgU9-Q')
# Функция, обрабатывающая команду /start
@bot.message_handler(commands=["start"])
def start_messanger(messanger):
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4t5')
cursor = connection.cursor()
cursor.execute("select id, name from Distilleries")
first_step = []
for id, name in cursor.fetchall():
f_s = str(id) + '. ' + name
first_step.append(f_s)
my_str = '\n'.join(first_step)
bot.send_message(messanger.chat.id, 'Я на связи. Выберите интересующую вас Винокурню, введите ее номер\n' + my_str.strip())
cursor.close()
connection.close()
@bot.message_handler(content_types=["text"])
def output(put):
n = put.text.strip()
m = int(n)
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4t5')
cursor = connection.cursor()
cursor.execute(f"select place, contacts, imagelink from Distilleries where id = {m}")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
bot.polling()
+121
View File
@@ -0,0 +1,121 @@
import telebot
import psycopg2
from telebot import types
# Создаем экземпляр бота
bot = telebot.TeleBot('5898574743:AAF2y_y3U2IfWwQVJ_lF6mmiDPlx1YgU9-Q')
# Функция, обрабатывающая команду /start
@bot.message_handler(commands=["start"])
def start_messanger(messanger):
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4t5')
cursor = connection.cursor()
cursor.execute("select id, name from Distilleries")
first_step = []
for id, name in cursor.fetchall():
f_s = str(id) + '. ' + name
first_step.append(f_s)
my_str = '\n'.join(first_step)
bot.send_message(messanger.chat.id, 'Я на связи. Выберите интересующую вас Винокурню, введите ее номер\n' + my_str.strip())
cursor.close()
connection.close()
@bot.message_handler(content_types=["text"])
def output(put):
n = put.text.strip()
m = int(n)
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4t5')
cursor = connection.cursor()
if (m==1):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(1)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 2):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(2)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 3):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(3)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 4):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(4)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 5):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(5)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 6):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(6)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 7):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(7)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 8):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(8)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 9):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(9)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
if (m == 10):
cursor.execute("select place, contacts, imagelink from Distilleries where id in(10)")
for place, contacts, imagelink in cursor.fetchall():
answer = 'Адрес: ' + place + ' ' + 'Контакты: ' + contacts + ' ' + 'Фото: ' + imagelink
bot.send_message(put.chat.id, answer)
cursor.close()
connection.close()
bot.polling()
-1
View File
@@ -1 +0,0 @@
Hello World!
-9
View File
@@ -1,9 +0,0 @@
# Diana Gasanova
import requests
from bs4 import BeautifulSoup as bs
URL = "https://www.kinopoisk.ru/lists/movies/top-250-2020/"
r = requests.get(URL, timeout=10)
soup = bs(r.text, "html.parser")
films = soup.find_all(attrs={"class": "styles_mainTitle__IFQyZ styles_activeMovieTittle__kJdJj"})
for film in films:
print(film.text)
+29
View File
@@ -0,0 +1,29 @@
# парсер к полусему 8 неделя
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from wget import download
import psycopg2 as psyc
# s = Service("chromedriver") на Ubuntu можно не указывать путь до драйвера :)
URL = "https://proskateshop.ru/skejtbordy/?utm_source=yandex&utm_medium=cpc&utm_campaign=cn%7Cskeyty_gz-1%7Ccid%7C51517250%7Csearch&utm_content=gid%7C4180310153%7Caid%7C8980588780%7C20506942844_20506942844%7Cmain&utm_term=%D0%9F%D0%B5%D0%BD%D0%BD%D0%B8%20%D0%B1%D0%BE%D1%80%D0%B4%20%D0%BA%D1%83%D0%BF%D0%B8%D1%82%D1%8C&etext=2202.N39xvihj0F0Od_d4etv_6nh36sdlRP-T26wHLuCJfjo_JZtVI5O7HY5f8FOJnzuLZXB6eWZoZnp2dG1laHBlcA.aceac50a24e4832d82874cd59ca1f9a315d9b351&_openstat=ZGlyZWN0LnlhbmRleC5ydTs1MTUxNzI1MDs4OTgwNTg4NzgwO3lhbmRleC5ydTpndWFyYW50ZWU&yclid=1445113833197462400"
brow = webdriver.Chrome()
brow.get(URL)
html = brow.page_source
soup = BeautifulSoup(html, "lxml")
penny = soup.find_all(attrs={"class": "product-layout product-grid col-lg-4 col-md-4 col-sm-6 col-xs-6"})
with psyc.connect(dbname="db_for_parse", user="dialuna") as conn:
with conn.cursor() as cursor:
for i, product in enumerate(penny[1:]):
image_link = product.find("img").attrs.get("src")
image_name = product.find("img").attrs.get("alt")
price = product.find("p", attrs={"class": "price"}).text.strip()
cursor.execute(f"""insert into test(link, name, price, file)
values ('{image_link}', '{image_name}', '{price}', 'images/{i}.jpg')""")
conn.commit()
+3
View File
@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
@@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.11" project-jdk-type="Python SDK" />
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Gusev.iml" filepath="$PROJECT_DIR$/.idea/Gusev.iml" />
</modules>
</component>
</project>
+6
View File
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../.." vcs="Git" />
</component>
</project>
-1
View File
@@ -1 +0,0 @@
print('Hello, World!')
@@ -0,0 +1,56 @@
from bs4 import BeautifulSoup # подключение к библиотекам парсинга и работы с базами данных
import psycopg2
from wget import download
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
S = Service("D:\Драйвер\chromedriver.exe")
browser = webdriver.Chrome(service=S)
browser.get('https://ultrasport.ru/catalog/velosipedy/gornye_velosipedy/') # подключение к сайту, с которого будем парсить данные
html_text = browser.page_source # сохранение html кода страницы в переменную html_text
soup = BeautifulSoup(html_text, 'lxml') # преобразуем код в дерево объектов
info = soup.find_all('div', class_="inner_wrap TYPE_1") # поиск всех описывающих товар общих тэгов
try:
connection = psycopg2.connect( # подключение к базе данных
host='localhost',
dbname='Bicycles',
user='postgres',
password='Q1w2e3r4'
)
connection.autocommit = True # настройка автоматического комита
with connection.cursor() as cursor: # создание таблицы в базе данных
cursor.execute(
"""CREATE TABLE bikes(
id serial PRIMARY KEY,
bike_name varchar(100) NOT NULL,
bike_view varchar(1000) NOT NULL,
bike_price varchar(100) NOT NULL,
bike_availability varchar(100) NOT NULL);
"""
)
with connection.cursor() as cursor: # заполнение таблицы данным, которые мы спарсили с сайта
for i, item in enumerate(info):
name = item.find('a', class_="dark_link js-notice-block__title option-font-bold font_sm").text.strip()
price = item.find('div', class_="price only_price font-bold font_mxs").text.strip()
enough = item.find('span', class_="value font_sxs").text.strip()
p_src = item.find('img', class_="lazy img-responsive").get("src")
download(p_src, f"images/{i+1}.jpg")
cursor.execute(
f"""INSERT INTO public.bikes(
bike_name, bike_view, bike_price, bike_availability)
VALUES
('{name}','images/{i+1}.jpg','{price}','{enough}');"""
)
except Exception as _ex: # обработка ошибок
print("[INFO] ERROR", _ex)
finally: # завершение подключения
if connection:
connection.close()
print("[INFO] Connection closed")
Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

+61
View File
@@ -0,0 +1,61 @@
from bs4 import BeautifulSoup # подключение к библиотекам парсинга и работы с базами данных
import psycopg2
from wget import download
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
S = Service("D:\Драйвер\chromedriver.exe")
browser = webdriver.Chrome(service=S)
browser.get('https://ultrasport.ru/catalog/velosipedy/gornye_velosipedy/') # подключение к сайту, с которого будем парсить данные
html_text = browser.page_source # сохранение html кода страницы в переменную html_text
soup = BeautifulSoup(html_text, 'lxml') # преобразуем код в дерево объектов
info = soup.find_all('div', class_="inner_wrap TYPE_1") # поиск всех описывающих товар общих тэгов
try:
connection = psycopg2.connect( # подключение к базе данных
host='localhost',
dbname='Bicycles',
user='postgres',
password='Q1w2e3r4'
)
connection.autocommit = True # настройка автоматического комита
with connection.cursor() as cursor: # создание таблицы в базе данных
cursor.execute(
"""CREATE TABLE bikes(
id serial PRIMARY KEY,
bike_name varchar(100) NOT NULL,
bike_view varchar(1000) NOT NULL,
bike_price varchar(100) NOT NULL,
bike_availability varchar(100) NOT NULL);
"""
)
with connection.cursor() as cursor: # заполнение таблицы данным, которые мы спарсили с сайта
for i, item in enumerate(info):
name = item.find('a', class_="dark_link js-notice-block__title option-font-bold font_sm").text.strip()
price = item.find('div', class_="price only_price font-bold font_mxs").text.strip()
enough = item.find('span', class_="value font_sxs").text.strip()
p_src = item.find('img', class_="lazy img-responsive").get("src")
download(p_src, f"images/{i+1}.jpg")
cursor.execute(
f"""INSERT INTO public.bikes(
bike_name, bike_view, bike_price, bike_availability)
VALUES
('{name}','images/{i+1}.jpg','{price}','{enough}');"""
)
except Exception as _ex: # обработка ошибок
print("[INFO] ERROR", _ex)
finally: # завершение подключения
if connection:
connection.close()
print("[INFO] Connection closed")
@@ -0,0 +1 @@
Проверка работы.
@@ -0,0 +1,54 @@
from bs4 import BeautifulSoup
from selenium.webdriver import Chrome
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
import wget
import psycopg2
import re
s = Service('C:\data\hrome\chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://music.yandex.ru/chart')
time.sleep (1)
html_text = browser.page_source
soup = BeautifulSoup(html_text, 'lxml')
Трек=soup.find_all('a', class_='d-track__title deco-link deco-link_stronger')
Длительность=soup.find_all('div', class_='d-track__info d-track__nohover')
Автор=soup.find_all('span', class_='d-track__artists')
Картинки=soup.find_all('img', class_='entity-cover__image deco-pane')
str_Картинки=[]
for i in range(len(Картинки)):
str_Картинки.append(Картинки[i])
str_Картинки=str(str_Картинки)
str_Картинки=re.findall(r'src="(.*?)"',str_Картинки)
for i in range(len(str_Картинки)):
str_Картинки[i]='https:'+str_Картинки[i]
#for i in range(len(str_cartinki)):
#wget.download(str_cartinki[i], 'TOP'+str((i+1))+'.jpeg')
connection = psycopg2.connect(dbname = 'dbdata',
user='postgres', password='Q1w2e3r4',
host='localhost')
cursor=connection.cursor()
creat_table="""CREATE TABLE music
(id serial primary key, "Трек" varchar(100),
"Длительность" varchar(100),
"Автор" varchar(100),
"Картинки" varchar(100))"""
cursor.execute(creat_table)
connection.commit()
for Трек, Длительность, Автор, Картинки in zip(Трек, Автор, Длительность, Картинки):
qwery=f"""INSERT INTO public.music(
Трек, Длительность, Автор, Картинки)
VALUES
('{Трек.text}','{Длительность.text}','{Автор.text}', '{Картинки.text}' )"""
cursor.execute(qwery)
connection.commit()
for i in range(1,len(str_Картинки)+1):
puti = r'C:\Users\kingo\PycharmProjects\pythonProject2\TOP' + str(i) + '.jpeg'
qwery=f"""UPDATE public.music
SET Картинки='{puti}'
WHERE id={i}"""
cursor.execute(qwery)
connection.commit()
@@ -0,0 +1,43 @@
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import psycopg2
from time import sleep
s = Service("C:\data\chromedriver.exe")
browser = webdriver.Chrome(service=s)
browser.get('https://untappd.com/brewery/top_rated')
sleep(1)
html_text=browser.page_source
soup = BeautifulSoup(html_text, 'lxml')
ratings = soup.find_all('div', class_='beer-item')
item = []
for i in ratings:
c = i.text
c = c.split('\n')
for k in c:
if k == '':
c.pop(c.index(k))
d = i.find('img').get('src')
c.append(d)
item.append(c)
item.pop(3)
item.pop(8)
connection = psycopg2.connect(host='localhost', dbname='breweries', user='postgres', password='Q1w2e3r4t5')
cursor=connection.cursor()
create = """ create table Information
(id int primary key, Name varchar(100), Place varchar(150), Sorts varchar(15), AmountOfRatings varchar(25),
Rating varchar(10), ImageLink varchar(150));"""
cursor.execute(create)
connection.commit()
for i in range(20):
insert_qwery="""INSERT INTO public.Information(id,Name, Place, Sorts, AmountOfRatings, Rating, ImageLink) VALUES
( '"""+str(i+1)+"""', '"""+item[i][0]+"""', '"""+item[i][1]+"""', '"""+item[i][2]+"""', '"""+item[i][3]+"""',
'"""+item[i][9]+"""', '"""+item[i][13]+"""');""";
cursor.execute(insert_qwery)
connection.commit()
cursor.execute('select * from Information')
print(cursor.fetchall())
cursor.close()
connection.close()
+41
View File
@@ -0,0 +1,41 @@
import psycopg2
import wget
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4')
cursor = connection.cursor()
creat_qwery = """ create table Parsing
(id serial primary key, product_name varchar(100), description varchar(1000), price varchar(10), priceDis varchar(30), scr varchar(100))"""
cursor.execute(creat_qwery)
connection.commit()
s = Service('E:\\Downloads\\chromedriver_win32.zip\\chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://trial-sport.ru/gds.php?s=51516&c1=1070639&c2=1070640')
html_code = browser.page_source
soup = BeautifulSoup(html_code, 'lxml')
product_name=soup.find_all('a', class_='title')
description=soup.find_all('span', class_='description')
price = soup.find_all('span', class_="price")
priceDis = soup.find_all('span', class_="discount")
picture = soup.find_all('div', class_="img")
for i in range(20):
url = 'https://trial-sport.ru/gds.php?s=51516&c1=1070639&c2=1070640'+picture[i].find('a').find('img')['src']
filename = f"E:\Downloads\parcing\img\{i}.jpg"
wget.download(url, filename)
cursor.execute(f"""insert into Parsing (product_name, description, price, priceDis, scr)
VALUES ('{product_name[i].text}','{description[i].text}', '{price[i].text}', '{priceDis[i].text}', '{filename}')""")
connection.commit()
cursor.close()
connection.close()
@@ -12,4 +12,3 @@ product_name=soup.find_all('a', class_='title')
description=soup.find_all('span', class_='description') description=soup.find_all('span', class_='description')
for product_name, description in zip(product_name, description): for product_name, description in zip(product_name, description):
print(f"Продукт: {product_name.text} \nОписание: {description.text}") print(f"Продукт: {product_name.text} \nОписание: {description.text}")
print(" ")
+9 -10
View File
@@ -4,6 +4,7 @@ from bs4 import BeautifulSoup
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.service import Service
import time import time
import config
i = 1 i = 1
s = Service("С:\DATA\ChromeDriver\chromedriver.exe") s = Service("С:\DATA\ChromeDriver\chromedriver.exe")
browser = webdriver.Chrome(service=s) browser = webdriver.Chrome(service=s)
@@ -22,14 +23,14 @@ productst = soup.find_all('a', class_="product-title__text")
pricest = soup.find_all('span', class_="price__main-value") pricest = soup.find_all('span', class_="price__main-value")
features = soup.find_all('span', class_="product-feature-list__value") features = soup.find_all('span', class_="product-feature-list__value")
pictures = soup.find_all('div', class_="product-picture-container") pictures = soup.find_all('div', class_="product-picture-container")
connection=psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4') connection=psycopg2.connect(host=config.host, dbname=config.dbname, user=config.user, password=config.password)
cursor = connection.cursor() cursor = connection.cursor()
""" insert = CREATE TABLE public.laptops( insert = """CREATE TABLE public.laptops(
id serial primary key, id serial primary key,
product varchar(100), Product varchar(100),
price varchar(15), Price varchar(15),
diagonal varchar(5), Diagonal varchar(5),
resolution varchar(20), Resolution varchar(20),
CPU varchar(50), CPU varchar(50),
RAM varchar(15), RAM varchar(15),
Graphics_Controller varchar(40), Graphics_Controller varchar(40),
@@ -37,7 +38,7 @@ Volume varchar(25),
src varchar(100) src varchar(100)
); );
""" """
insert = """TRUNCATE TABLE public.laptops; ALTER SEQUENCE laptops_id_seq RESTART WITH 1;"""
cursor.execute(insert) cursor.execute(insert)
connection.commit() connection.commit()
for i in range(len(productst)): for i in range(len(productst)):
@@ -49,13 +50,11 @@ for i in range(len(productst)):
wget.download(url, filename) wget.download(url, filename)
t = pricest[i].text.replace("\xa0", " ") t = pricest[i].text.replace("\xa0", " ")
insert = f"""INSERT INTO public.laptops( insert = f"""INSERT INTO public.laptops(
product, price, diagonal, resolution, CPU, RAM, Graphics_Controller, Volume, src) Product, Price, Diagonal, Resolution, CPU, RAM, Graphics_Controller, Volume, src)
VALUES VALUES
('{productst[i].text.strip()}', '{t.strip()}', '{u[0][:u[0].find("/")]}', '{u[0][u[0].find("/")+1:]}', ('{productst[i].text.strip()}', '{t.strip()}', '{u[0][:u[0].find("/")]}', '{u[0][u[0].find("/")+1:]}',
'{u[2]}', '{u[4]+" "+u[5]}', '{u[6]}', '{u[8]}', '{filename}');""" '{u[2]}', '{u[4]+" "+u[5]}', '{u[6]}', '{u[8]}', '{filename}');"""
cursor.execute(insert) cursor.execute(insert)
connection.commit() connection.commit()
cursor.execute("select * from laptops")
print("Результат", cursor.fetchall())
cursor.close() cursor.close()
connection.close() connection.close()
+38
View File
@@ -0,0 +1,38 @@
import telebot
import psycopg2
import config
def execute_request(request):
connection = psycopg2.connect(host=config.host, dbname=config.dbname, user=config.user, password=config.password)
cursor = connection.cursor()
cursor.execute(request)
result = cursor.fetchall()
cursor.close()
connection.close()
return result
max_id = int(execute_request("select count(*) from laptops")[0][0])
bot = telebot.TeleBot(config.bot_token)
@bot.message_handler(commands=["start"])
def start(m, res=False):
bot.send_message(m.chat.id, f'Привет. Введите идентификатор от 1 до {max_id}, чтобы получить данные: ')
@bot.message_handler(content_types=["text"])
def from_bd(message):
try:
current_id = int(message.text)
except BaseException:
bot.send_message(message.chat.id, "Вы неправильно ввели ID. Попробуйте снова:")
return
if current_id > max_id:
bot.send_message(message.chat.id, "ID больше, чем количество товаров. Попробуйте снова:")
return
else:
data = execute_request(f"select * from laptops where id = {current_id}")[0][1:-1]
names_of_columns = ["Товар", "Цена", "Диагональ", "Разрешение", "Процессор", "Оперативная память", "Графический контроллер", "Объём диска"]
everydata = []
for data_name, column_name in zip(data, names_of_columns):
everydata.append(column_name.capitalize() + ": " + data_name)
bot.send_message(message.chat.id, "\n\n".join(everydata))
bot.send_message(message.chat.id, f"Введите следующий ID от 1 до {max_id}:")
bot.polling(none_stop=True, interval=0)
+49
View File
@@ -0,0 +1,49 @@
import psycopg2
import wget
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4')
cursor = connection.cursor()
create_table = """ create table dresses
(id serial primary key, name varchar(200), sale varchar(50), price varchar(50), info varchar(50), picture varchar(200))"""
cursor.execute(create_table)
connection.commit()
driver = Service('D:\data\chromedriver.exe')
browser = webdriver.Chrome(service=driver)
browser.get('https://www.ozon.ru/category/platya-zhenskie-7502/')
html_code = browser.page_source
soup = BeautifulSoup(html_code, 'lxml')
names = []
sale = soup.find_all('div', class_="eg1 g3e")
price = soup.find_all('span', class_="a2a-a2")
info = soup.find_all('span', class_="je4")
picture = soup.find_all('div', class_="k1m")
products = soup.find_all("div", class_="k7o o7k")
for product in products:
names.append(soup.find('span', class_="m2e e3m m3e m5e tsBodyL k7l l7k").text.strip())
print(names)
exit(0)
for i in range(20):
url = picture[i].find('img').attrs['src']
file_name = f"C:\\Users\\Honor\\Desktop\\учеба\\прога\\pictures\\{i}.jpg"
wget.download(url, file_name)
ins_table = f"""insert into public.dresses(name, sale, price, info, picture) values ('{name[i].text}', '{sale[i].text}', '{price[i].text}', '{info[i].text}', '{file_name}')"""
cursor.execute(ins_table)
connection.commit()
cursor.close()
connection.close()
+15
View File
@@ -0,0 +1,15 @@
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
s = Service('D:\data\chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://www.kfc.ru/')
html_text = browser.page_source
soup = BeautifulSoup(html_text, 'lxml')
prices = soup.find_all(attrs={"class": "GFmMCzZoYv"})
titles = soup.find_all(attrs={"class": "_14ZQf5wtqx c-description"})
for price, title in zip(prices, titles):
print(f" название {title.text} ; цена: {price.text}")
+37
View File
@@ -0,0 +1,37 @@
import telebot
import random
from telebot import types
f = open('C:\\Users\\Honor\\Desktop\\учеба\\прога\\тг_бот\\бот\\факт.txt', 'r', encoding='UTF-8')
facts = f.read().split('\n')
f.close()
f = open('C:\\Users\\Honor\\Desktop\\учеба\\прога\\тг_бот\\бот\\поговорка.txt', 'r', encoding='UTF-8')
thinks = f.read().split('\n')
f.close()
bot = telebot.TeleBot('5696445699:AAEPKQgUAs39DTLr_iyQvlaFAsJNFK8DMnc')
@bot.message_handler(commands=["start"])
def start(m, res=False):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Факт")
item2=types.KeyboardButton("Поговорка")
markup.add(item1)
markup.add(item2)
bot.send_message(m.chat.id, 'Нажми: \nФакт'
' для получения интересного факта\nПоговорка '
'— для получения мудрой цитаты ', reply_markup=markup)
@bot.message_handler(content_types=["text"])
def handle_text(message):
if message.text.strip() == 'Факт' :
answer = random.choice(facts)
elif message.text.strip() == 'Поговорка':
answer = random.choice(thinks)
bot.send_message(message.chat.id, answer)
bot.polling(none_stop=True, interval=0)
+43
View File
@@ -0,0 +1,43 @@
from bs4 import BeautifulSoup
from selenium.webdriver import Chrome
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import psycopg2
import wget
import time
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4')
cursor = connection.cursor()
s = Service('C:/Users/rusta/OneDrive/Рабочий стол/ИНФА/инфа 2 сем/driver/chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://www.kp.ru/expert/elektronika/luchshie-noutbuki/')
time.sleep (10)
html_text = browser.page_source
soup = BeautifulSoup(html_text, 'lxml')
creat_table="""create table notes
(id serial primary key, name varchar(150),
scr varchar(150))"""
cursor.execute(creat_table)
connection.commit()
names= soup.find_all('h3', class_="wp-block-heading")
pictures = soup.find_all('figure', class_="wp-block-image size-full")
print(len(names))
for i in range(len(names)):
url = pictures[i].find('img')['src']
filename = f"C:\\Users\\rusta\\OneDrive\\Рабочий стол\\pictures\\{i}.jpg"
wget.download(url, filename)
insert_qwery = """INSERT INTO public.notes(name, scr)
VALUES( %s, %s, %s);"""
record_to_insert = (names[i].text, filename)
cursor.execute(insert_qwery, record_to_insert)
connection.commit()
cursor.close()
connection.close()
+15
View File
@@ -0,0 +1,15 @@
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import time
s = Service('C:/Users/rusta/OneDrive/Рабочий стол/ИНФА/инфа 2 сем/driver/chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://lafoy.ru/modnye-muzhskie-strizhki-2023-3052/')
time.sleep (10)
html_text = browser.page_source
soup = BeautifulSoup(html_text, 'lxml')
haircuts = soup.find_all('h2', class_='tm8 post__title')
for i in range(0, 30):
print(haircuts[i].text)
+1
View File
@@ -0,0 +1 @@
+39
View File
@@ -0,0 +1,39 @@
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import psycopg2
import wget
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4')
cursor = connection.cursor()
crtable = """ create table Notebooks
(id serial primary key, name varchar(500), description varchar(500), code varchar(200), price varchar(100),
picture varchar(500)) """
cursor.execute(crtable)
connection.commit()
s = Service('C:\\Users\\Yekaterina\\Downloads\\chromedriver_win32\\chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://www.citilink.ru/catalog/noutbuki/')
html_text = browser.page_source
soup = BeautifulSoup(html_text, 'lxml')
name = soup.find_all('div', class_='app-catalog-1tp0ino e1an64qs0')
description = soup.find_all('div', class_='app-catalog-1o4umte eevw8x70')
code = soup.find_all('div', class_= 'app-catalog-0 e1dsj6g20')
price = soup.find_all('div', class_= 'app-catalog-0 e1dsj6g20')
picture = soup.find_all('div', class_='app-catalog-0 e1jarwcz0')
for i in range(len(name)):
url = picture[i].find('img').attrs['src']
file = f"C:\\Users\\Yekaterina\\Desktop\\baza\\pic{i}.JPG"
wget.download(url, file)
ins_qwery = f"""insert into public.Notebooks(name, description, code, price, picture)
values ('{name[i].text}', '{description[i].text}', '{code[i].text}', '{price[i].text}','{file}')"""
cursor.execute(ins_qwery)
connection.commit()
cursor.close()
connection.close()
+36
View File
@@ -0,0 +1,36 @@
import telebot
import psycopg2
import config
from telebot import types
import random
import tableCreator
connection = psycopg2.connect(host='localhost', dbname='parc', user='postgres', password='Q1w2e3r4')
cursor = connection.cursor()
ins_query = """SELECT * FROM public.Notebooks"""
cursor.execute(ins_query)
array = list(cursor.fetchall())
bot = telebot.TeleBot('6205726630:AAF4zfV_P2b0f7bClm__sWuRmoZ1XpiC_xo')
@bot.message_handler(commands=["start"])
def start(m, res=False):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Выбери ноутбук")
item2=types.KeyboardButton("Еще!")
markup.add(item1)
markup.add(item2)
bot.send_message(m.chat.id, 'Нажми: \nВыбери ноутбук'
' для просмотра товара\nЕще! '
'— для повтора', reply_markup=markup)
@bot.message_handler(content_types=["text"])
def handle_text(message):
if message.text.strip() == 'Выбери ноутбук' :
q = random.choice(array)
answer = f'Название: {q[1]}\nОписание: {q[2]}\nКод: {q[3]}\nЦена: {q[4]}\n'
bot.send_message(message.chat.id, answer)
bot.send_picture(message.chat.id, open(q[5], 'rb'))
elif message.text.strip() == 'Еще!':
bot.send_message(message.chat.id, 'Ввод: '+ message.text)
bot.polling(none_stop=True, interval=0)
@@ -1,6 +1,5 @@
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
from selenium import webdriver from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from wget import download from wget import download
import psycopg2 as psyc import psycopg2 as psyc
@@ -27,5 +26,4 @@ with psyc.connect(dbname="db_for_parse", user="perfecto") as conn:
cursor.execute(f"""insert into images(link, name, price, description, file) cursor.execute(f"""insert into images(link, name, price, description, file)
values ('{image}', '{title}', '{price}', '{desc}', 'images/{i}.jpg')""") values ('{image}', '{title}', '{price}', '{desc}', 'images/{i}.jpg')""")
conn.commit() conn.commit()
+50
View File
@@ -0,0 +1,50 @@
import telebot as tb
import config
import psycopg2 as ps
def exec_query(query: str) -> list:
with ps.connect(dbname=config.db_name, user=config.user) as conn:
with conn.cursor() as cur:
cur.execute(query)
res = cur.fetchall()
return res
def get_data(mess, bot, rows_number: int) -> None:
try:
product_id = int(mess.text)
except BaseException:
bot.send_message(mess.chat.id, "Invalid id")
return
if product_id > rows_number:
bot.send_message(mess.chat.id, "Id is bigger than number of products")
return
else:
data = exec_query(
f"select * from images where id = {product_id}")[0][1:]
bot.send_message(mess.chat.id, "\n\n".join(data))
bot = tb.TeleBot(config.token)
keyboard = tb.types.ReplyKeyboardMarkup()
keyboard.row("get data")
@bot.message_handler(commands=["start"])
def hi(mess):
bot.send_message(mess.chat.id, "HI there!", reply_markup=keyboard)
@bot.message_handler(content_types=["text"])
def f(mess):
if mess.text == "get data":
row_number = int(exec_query("select count(*) from images")[0][0])
bot.send_message(mess.chat.id, f"Write id between 1 and {row_number}")
bot.register_next_step_handler(mess, get_data, bot, row_number)
bot.polling(non_stop=True)
+6 -8
View File
@@ -3,6 +3,7 @@ from selenium import webdriver
from selenium.webdriver.chrome.service import Service from selenium.webdriver.chrome.service import Service
import psycopg2 import psycopg2
import wget import wget
import time
connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4') connection = psycopg2.connect(host='localhost', dbname='dbdata', user='postgres', password='Q1w2e3r4')
cursor = connection.cursor() cursor = connection.cursor()
@@ -11,6 +12,7 @@ s = Service('D:\Games\data\chromedriver.exe')
browser = webdriver.Chrome(service=s) browser = webdriver.Chrome(service=s)
browser.get('https://www.volkswagen.ru/polo/') browser.get('https://www.volkswagen.ru/polo/')
html_text = browser.page_source html_text = browser.page_source
time.sleep(2)
soup = BeautifulSoup(html_text, 'lxml') soup = BeautifulSoup(html_text, 'lxml')
creat_table = """ create table Cars_volks creat_table = """ create table Cars_volks
@@ -25,17 +27,13 @@ prices = soup.find_all('div', class_='avn001-2_price-container')
adresses = soup.find_all('div', class_='avn001-2_dealer-link__text') adresses = soup.find_all('div', class_='avn001-2_dealer-link__text')
pictures = soup.find_all('div', class_='avn001-2_image image__container') pictures = soup.find_all('div', class_='avn001-2_image image__container')
#for car_name, adress, price in zip(car_names, adresses, prices):
# print(f"Название машины:{car_name.text} | Адрес диллера: {adress.text} | Цена: {price.text} рублей")
for i in range(len(car_names)): for i in range(len(car_names)):
url = pictures[i].find('img').attrs['src'] url = pictures[i].find('img')['src']
filename = f"c22712\\Задания\\task1\\nikitin\\img\\{i}.jpg" filename = f"C:\\Users\\Пользователь\\OneDrive\\Рабочий стол\\pycharm\\c22712\\Задания\\task1\\nikitin\\img\{i}.jpg"
# wget.download(url, filename) представим что картинки скачались:) wget.download(url, filename)
insert_qwery = f"""INSERT INTO public.Cars_volks(car_name, price, adress, scr) insert_qwery = f"""INSERT INTO public.Cars_volks(car_name, price, adress, scr)
VALUES ('{car_names[i].text}', '{prices[i].text}', '{adresses[i].text}', '{filename}')"""; VALUES ('{car_names[i].text}', '{prices[i].text}', '{adresses[i].text}', '{filename}')""";
cursor.execute(insert_qwery) #cursor.execute(insert_qwery)
connection.commit() connection.commit()
cursor.close() cursor.close()
+43
View File
@@ -0,0 +1,43 @@
import wget
import psycopg2
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
connection = psycopg2.connect(host='localhost', dbname='postgres',
user='postgres', password='Q1w2e3r4')
cursor = connection.cursor()
cr_qwery = """ create table parser
(id serial primary key,
name varchar(60),
price varchar(15),
picture varchar(100))"""
cursor.execute(cr_qwery)
connection.commit()
s = Service('C:\Desktop\exe\chromedriver.exe')
browser = webdriver.Chrome(service=s)
browser.get('https://www.hellride.ru/catalog/zapchasti-dlya-tryukovyh-samokatov/deki')
html_code = browser.page_source
soup = BeautifulSoup(html_code, 'lxml')
name = soup.find_all('span', class_='product-card__title')
price = soup.find_all('span', class_='product-card__price')
picture = soup.find_all('img', class_='product-slider__slide-img swiper-lazy swiper-lazy-loaded')
#for prices, names in zip(price, name,):
#print(f" название {names.text} ; цена: {prices.text} ")
for i in range(len(name)):
url = picture[i].attrs['src']
filename = f"C:\\Users\\Михаил\PycharmProjects\pythonProject8\\venv\Pictures\{i}.jpg"
wget.download(url, filename)
ins_qwery = f"""insert into public.Parser(name, price, picture)
values ('{name[i].text}', '{price[i].text}', '{filename}')"""
cursor.execute(ins_qwery)
connection.commit()
cursor.close()
connection.close()