Парсинг с сайта и введение в БД

This commit is contained in:
Dronminator
2023-03-27 13:23:25 +03:00
parent 0496fac352
commit 1604cf2232
+19 -29
View File
@@ -7,65 +7,55 @@ import time
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)
browser.get("https://www.mvideo.ru/noutbuki-planshety-komputery-8/noutbuki-118?from=under_search") browser.get("https://www.mvideo.ru/noutbuki-planshety-komputery-8/noutbuki-118/f/tolko-v-nalichii=da?from=under_search")
time.sleep(5)
"""
height = browser.execute_script("return document.body.scrollHeight") height = browser.execute_script("return document.body.scrollHeight")
time.sleep(4) time.sleep(4)
while 900*i < height: for i in range(10):
height = browser.execute_script("return document.body.scrollHeight") browser.execute_script(f"window.scrollTo(0, {1000*i})")
browser.execute_script(f"window.scrollTo(0,{900*i})")
time.sleep(1) time.sleep(1)
i+=1 """
html_text = browser.page_source html_text = browser.page_source
soup = BeautifulSoup(html_text, 'lxml') soup = BeautifulSoup(html_text, 'lxml')
productst = soup.find_all('a', class_="product-title__text") 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('ul', class_="product-feature-list product-feature-list--undefined") features = soup.find_all('span', class_="product-feature-list__value")
pictures = soup.find_all('img', class_="product-picture__img product-picture__img--list") pictures = soup.find_all('div', class_="product-picture-container")
products, prices, diagonals, resolutions, CPUs, RAMs, Graphics_controllers, Volumes = [],[],[],[],[],[],[],[]
for i in range(len(productst)):
products.append(productst[i].text.strip())
prices.append(pricest[i].text.replace("\xa0", "").strip())
for feature in features:
u = feature.text
diagonals.append(u[20:u.find("\"",20)+1])
resolutions.append(u[u.find("\"",20)+2:u.find(".", 23)+1])
CPUs.append(u[u.find("Процессор",20)+9:u.find("ГГц",20)+3].replace("\xa0",""))
RAMs.append(" ".join(u[u.find("(RAM)",20)+5:u.find("Графический контроллер")].split()))
Graphics_controllers.append(u[u.find("Графический контроллер")+22:u.rfind("Объем")-2])
Volumes.append(u[u.rfind("Объем")+6:].replace("\xa0", "").strip())
for i in range(len(Volumes)):
u = Volumes[i]
if u.rfind("D")!=-1: Volumes[i] = u[:u.rfind("D")+1]+ " " + u[u.rfind("D")+1:]
else: Volumes[i] = u[:u.rfind("С")+1]+ " " + u[u.rfind("С")+1:]
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()
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(10), RAM varchar(15),
Graphics_Controller varchar(40), Graphics_Controller varchar(40),
Volume varchar(25), 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(products)): for i in range(len(productst)):
url = "https://"+pictures[i]['src'] url = "https://"+pictures[i].find('img')['src']
filename = f"C:\DATA\Images\{i+1}.jpg" filename = f"C:\DATA\Images\{i+1}.jpg"
u = []
for j in range(10):
u.append(features[10*i+j].text)
wget.download(url, filename) wget.download(url, filename)
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
('{products[i]}', '{prices[i]}', '{diagonals[i]}', '{resolutions[i]}', '{CPUs[i]}', '{RAMs[i]}', '{Graphics_controllers[i]}', '{Volumes[i]}', '{filename}');""" ('{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}');"""
cursor.execute(insert) cursor.execute(insert)
connection.commit() connection.commit()
cursor.execute("select * from laptops") cursor.execute("select * from laptops")
print("Результат", cursor.fetchall()) print("Результат", cursor.fetchall())
cursor.close() cursor.close()
connection.close() connection.close()