Вот код:
import requests from bs4 import BeautifulSoup URL = 'https://auto.ria.com/car/daewoo/' HEADERS = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0', 'accept': '*/*'} def get_html(url, params=None): r = requests.get(url, headers=HEADERS, params=params) return r def get_content(html): soup = BeautifulSoup(html, 'html.parser') items = soup.find_all('section', class_='ticket-item') cars = [] for item in items: price_uah = item.find('span', class_='i-block') if price_uah: price_uah = price_uah.get_text() else: price_uah = 'Не указано' cars.append({ 'title': item.find('div', class_='item ticket-title').get_text(strip=True), 'link': item.find('a', class_='address').get('href'), 'price_usd': '$' + item.find('span', class_='green').get_text(), 'price_uah': item.find('span', class_='i-block').get_text(strip=True), 'car_mileage': item.find('li', class_='js-race').get_text(strip=True), 'location': item.find('li', class_='js-location').get_text(strip=True).replace('(от)',''), # 'fuel': item.find_all('li', class_='item-char').get_text(strip=True) }) print(cars) print(len(cars)) def parse(): html = get_html(URL) if html.status_code == 200: get_content(html.text) else: print('Error в def parse') parse()
Проблема в закомментированной строчке. Ей я пытаюсь достать тип топлива, на котором работает автомобиль. Я не понимаю как достать данные из тега <i> с классом icon-fuel (аналогично с типом коробки передач для i с классом icon-akp):
Как видно на скриншоте выше, у родительского (правильно употребил термин?) тега <li> стоит класс item-char, по которому я могу получить данные, но так как такой класс еще у трех тегов, то данные я получаю из первого (пробег), а надо из третьего (четвертого для типа коробки передач).
Вопросы:
Возможно ли достать данные напрямую из тега <i>?Если да, то как?
Если нет, то как достать данные из третьего (четвертого) <li> в примере?
Как это сделал бы грамотный/опытный специалист?
Большое спасибо всем, не прошедшим мимо)