Как сделать сортировку в парсере Avito?
Пишу парсер данных об биноклях в Avito. Помимо предложений о бинокле, парсится реклама. Парсится только первое объявление. Что я сделал не так?
import requests
from bs4 import BeautifulSoup
import csv
import random
CSV = 'avito.csv'
HOST = 'https://www.avito.ru/'
URL = 'https://www.avito.ru/respublika_krym?s=1&q=%D0%B1%D0%B8%D0%BD%D0%BE%D0%BA%D0%BB%D1%8C+20&p=1'
HEADERS = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
}
def get_html(url, params = ''):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div', class_='item__line')
cards = []
for item in items:
name = item.find('div', class_="snippet-title-row").get_text(strip=True).lower()
if 'Бинокль' in name:
cards.append(
{
'title': item.find('div', class_="snippet-title-row").get_text(strip=True),
'price': item.find('div', class_="snippet-price-row").get_text(strip=True),
'city': item.find('div', class_="item-address-georeferences").get_text(strip=True),
'href': HOST + item.find('div', class_="snippet-title-row").find('a').get('href')
}
)
return cards
else:
continue
def save_doc(items, path):
with open(path, 'w', newline='', encoding="utf-8") as file:
writer = csv.writer(file, delimiter=';')
writer.writerow(['Название', 'Цена', 'Город', 'Ссылка на товар'])
for item in items:
writer.writerow([item['title'],item['price'], item['city'], item['href']])
def parser():
PAGENATION = input('укажите кол страниц :')
PAGENATION = int(PAGENATION)
html = get_html(URL)
if html.status_code == 200:
cards = []
for page in range(1, PAGENATION + 1):
print(f'парсим страницу:{page}')
html = get_html(URL, params={'p': page})
cards.extend(get_content(html.text))
save_doc(cards, CSV)
else:
print('Сайт лежит ((')
parser()