Спарсить название объявления на Авито на Python
Всем добрый день! Делаю парсер для авито на python, универсальный, то есть под любую категорию. Не могу спарсить название объявления. Вот код HTML на самом сайте авито:
<h3 class="snippet-title" data-marker="item-title" data-shape="default">
<a class="snippet-link" itemprop="url" href="/moskva/avtomobili/bmw_5_seriya_2013_1906074802" target="_blank" title="BMW 5 серия, 2013, с пробегом, цена 1 157 000 руб. - Автомобили в Москве">BMW 5 серия, 2013</a>
Есть ссылка на стрницу: https://www.avito.ru/moskva/avtomobili/bmw/5-seriya-ASgBAgICAkTgtg3klyjitg3UnCg?radius=0 Не могу получить название: BMW 5 серия, 2013. Эти слова не в span, как получить - не знаю. Имеется код:
def parse_block(self, item)
url_block = item.select_one('a.snippet-link')
href = url_block.get('href')
if href:
url = 'https://www.avito.ru' + href
else:
url = None
# Выбрать блок с названием
title_block = item.select_one('h3.snippet-title.a.snippet-link')
print(title_block)
return
title = title_block.string.strip()
h3.snippet-title.a.snippet-link - неудачная попытка достать текст. Подскажите пожалуйста, как достать эти слова: "BMW 5 серия, 2013" отсюда:
<a class="snippet-link" itemprop="url" href="/moskva/avtomobili/bmw_5_seriya_2013_1906074802" target="_blank" title="BMW 5 серия, 2013, с пробегом, цена 1 157 000 руб. - Автомобили в Москве">BMW 5 серия, 2013</a>.
Заранее огромное спасибо!
Ответы (2 шт):
Вытащить все атрибуты
title_block.attrs
Ещё один из вариантов -- это поиск подстроки и всё. Ссылку достали. Предположим, она лежит в переменной title (вы его вроде вытащили).
s_anchor = 'title="' # якорь начальной позиции
f_anchor = '">' # якорь конечной позиции позиции
s_pos = title.find(s_anchor) + len(s_anchor) # ищем начало title
f_pos = title[s_pos].find(f_anchor) # ищем конечную позицию.
name = title[s_pos:f_pos] # название, которое лежит в атрибуте
Так проще:
title = item.find('a', class_='snippet-link')['title']
Где item Это soup.find('div', {'itemtype': 'http://schema.org/Product'})
Здесь полный код
def get_item(html):
products = []
soup = bs(html, 'lxml') # bs == from bs4 import BeautifulSoup as bs
items = soup.find_all('div', {'itemtype': 'http://schema.org/Product'})
for item in items:
title = item.find('a', class_='snippet-link')['title']
price = item.find('span', {'data-marker': 'item-price'}).text
link = 'https://www.avito.ru' + item.find('a', class_='snippet-link')['href']
products.append((title, price.strip(), link))
return products