После парсинга программа уходит в аут и ничего не делает
Парсер получает информацию, после чего записывает ее в эксель, данные он получает нормально, но после этого почему-то уходит в аут и все.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.chrome.options import Options
import xlsxwriter
from time import sleep
import random
class Parser():
def __init__(self):
self.driver = webdriver.Chrome()
def parse_name_and_href(self):
try:
self.driver = webdriver.Chrome()
self.driver.get('https://sferacar.ru/katalog-avtomobilej?type=22&order_by=cost_ru:asc')
self.content = self.driver.find_elements(By.CLASS_NAME, 'auto')
self.urls = self.driver.find_elements(By.XPATH,'//div[@class ="auto-content"]/a')
self.urls = [a.get_attribute('href') for a in self.urls]
self.button = self.driver.find_element(By.CLASS_NAME, 'btn')
self.button.click()
self.wait = WebDriverWait(self.driver, 20)
while len(self.content) < 30:
self.button = self.driver.find_element(By.CLASS_NAME, 'btn')
self.button.click()
self.urls = self.driver.find_elements(By.XPATH, '//div[@class ="auto-content"]/a')
self.content = self.driver.find_elements(By.CLASS_NAME, 'auto')
print(len(self.content))
sleep(random.randint(0,1))
print('Done!!')
self.content = [cell.text for cell in self.content]
print(self.content)
self.urls = [a.get_attribute('href') for a in self.urls]
print(self.urls)
self.probeg = self.probego(self.urls)
print('Done!')
self.write_in_exel(self.content,self.urls,self.probeg)
self.driver.close()
finally:
self.driver.close()
def probego(self,href):
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)
all_prob = []
try:
for url in href:
driver.get(url)
probeg = driver.find_elements(By.CLASS_NAME,'auto-chars-value')
probeg = [cell.text for cell in probeg]
if 'Бензин' in probeg or 'бензин' in probeg:
all_prob.append(probeg[3:5])
sleep(random.randint(0,1))
else:
all_prob.append(probeg[2:4])
sleep(random.randint(0,1))
print(all_prob)
finally:
driver.close()
return all_prob
def write_in_exel(self,content,urls,probeg):
con = []
name = 'catalog'
k = 0
if exists(f'{name}.xlsx') == False:
self.workbook = xlsxwriter.Workbook('catalog.xlsx')
else:
while exists(f'{name}.xlsx') == True:
k +=1
name+=str(k)
self.workbook = xlsxwriter.Workbook(f'{name}.xlsx')
self.worksheet = self.workbook.add_worksheet()
try:
self.worksheet.write('A1', 'Название авто')
self.worksheet.write('B1', 'Год')
self.worksheet.write('C1', 'Пробег по РФ')
self.worksheet.write('D1', 'Пробег')
self.worksheet.write('E1', 'Объем двигателя')
self.worksheet.write('F1', 'Цена')
self.worksheet.write('G1', 'Ссылка')
self.begin = 2
for y in content:
string = y.split('\n')
del string[3:5]
string = string[0:-2]
con.append(string)
for j, (auto,year,ob,cost) in enumerate(con,start=self.begin):
self.worksheet.write(f'A{j}', auto)
self.worksheet.write(f'B{j}', year)
self.worksheet.write(f'F{j}', cost)
self.worksheet.write(f'E{j}', ob)
for j, (in_rus,not_in_rus) in enumerate(probeg, start=self.begin):
self.worksheet.write(f'C{j}',in_rus)
self.worksheet.write(f'D{j}',not_in_rus)
for j,(href) in enumerate(urls,start=self.begin):
self.worksheet.write(f'G{j}', href)
finally:
self.workbook.close()
p = Parser()
p.parse_name_and_href()```
Ответы (1 шт):
Автор решения: Bubunduc
→ Ссылка
Код рабочий, заговздка оказалась в том, что у него низкая скорость обработки, которую я принял за зависание