Python Селен находит только первый элемент на странице - PullRequest
0 голосов
/ 22 марта 2020

Это мой второй вопрос по StackOverflow, поэтому, пожалуйста, будьте добры ко мне.

Я пытаюсь получить некоторые данные из autoscout24 через Selenium и Python. URL-адрес веб-страницы: Ссылка

У меня две принципиальные проблемы, для которых у меня нет решения:

  1. У меня нет значений для пробега et c. с первой страницы.
  2. Значение «Пробег», «Дата изготовления» и «Производительность» на следующих страницах всегда одинаково (первое значение на странице).

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)

Если у вас есть идеи, что я делаю не так или могу сделать лучше, пожалуйста, скажите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...