Форум сайта python.su
Пишу парсер ria.com. Не получается достать нужные данные со страницы, помогите, плиз
Вот код:
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()
Офлайн
garlikЭти данные к тегу i не относятся, они после него идут в виде текстового узла документа.
Я не понимаю как достать данные из тега <i> с классом icon-fuel (аналогично с типом коробки передач для i с классом icon-akp)
>>> import bs4 >>> >>> text = """\ ... <ul class="list"> ... <li class="item"> ... ::marker ... <i class="text"></i> ... Текст ... </li> ... </ul> ... """ >>> >>> soup = bs4.BeautifulSoup(text, 'html.parser') >>> li = soup.find('li') >>> text = tuple(li)[-1].strip() >>> text 'Текст' >>>
Офлайн
'fuel': item.find_all('li')[2].get_text(strip=True), 'transmission':item.find_all('li')[3].get_text(strip=True)
Офлайн