Это мой второй вопрос по StackOverflow, поэтому, пожалуйста, будьте добры ко мне.
Я пытаюсь получить некоторые данные из autoscout24 через Selenium и Python. URL-адрес веб-страницы: Ссылка
У меня две принципиальные проблемы, для которых у меня нет решения:
- У меня нет значений для пробега et c. с первой страницы.
- Значение «Пробег», «Дата изготовления» и «Производительность» на следующих страницах всегда одинаково (первое значение на странице).
HTML Структура выглядит следующим образом:
<ul data-item-name="vehicle-details">
<div class="cldt-summary-vehicle-data" data-item-name="vehicle-data">
<ul data-item-name="vehicle-details">
<li>
126.000 km
</li>
<li>
05/2012
</li>
<li>
105 kW (143 PS)
</li>
Я сохранил все страницы результатов в списке и перебираю его, пытаясь получить все данные с каждой страницы.
def scrap(self, results):
self.results = results
df = pandas.DataFrame(columns = ['name', 'price', 'mileage', 'productiondate', 'performance'])
carData = {}
for result in self.results:
sys.stdout.write('\r Progressing: ' + result)
self.driver.get(result)
#print('Extracting site {}'.format(result))
time.sleep(numpy.random.randint(numpy.random.randint(1,2), numpy.random.randint(2, 3))) # create a random waiting time somewhere between 1 and 3 seconds
for car in self.driver.find_elements_by_class_name('cl-list-element.cl-list-element-gap'):
carName = car.find_element_by_class_name('cldt-summary-makemodel.sc-font-bold.sc-ellipsis').text # name of the car
carPrice = car.find_element_by_class_name('cldt-price.sc-font-xl.sc-font-bold').text # price of the car
carMileage = car.find_element_by_xpath('//div[@class="cldt-summary-vehicle-data"]/ul/li[1]').text # mileage of the car
carProductionDate = car.find_element_by_xpath('//div[@class="cldt-summary-vehicle-data"]/ul/li[2]').text # production date of the car MM/YYYY
carPerformance = car.find_element_by_xpath('//div[@class="cldt-summary-vehicle-data"]/ul/li[3]').text # performance in PS or KW
# add car extras here
carData = pandas.Series({'name': carName,
'price': carPrice,
'mileage': carMileage,
'productiondate': carProductionDate,
'performance': carPerformance})
#print(carData)
df = df.append(carData, ignore_index = True)
return df
Результат, полученный для CarData, следующий. Со второй страницы я правильно понял имена. Но я получаю только первое значение для пробега, даты производства и производительности со страницы.
name price mileage productiondate performance
0 BMW 118
1
2
3
4
.. ... ... ... ... ...
129 BMW 320 € 9.999,- 153.311 km 05/2012 105 kW (143 PS)
130 BMW 125 € 9.999,- 153.311 km 05/2012 105 kW (143 PS)
131 BMW 120 € 9.999,- 153.311 km 05/2012 105 kW (143 PS)
132 BMW 320 € 10.000,- 153.311 km 05/2012 105 kW (143 PS)
133 BMW 320 € 10.000,- 153.311 km 05/2012 105 kW (143 PS)
Если у вас есть идеи, что я делаю не так или могу сделать лучше, пожалуйста, скажите мне.