Подскажите пожалуйста юнцу)) Суть вопроса примерно та же, только мне нужно как то извлечь параметр страницы из URL на авито, вроде как очевидно но почему то моя программа парсит страницу циклом равным количеству страниц, но новый параметр, тобишь номер следующей страницы в URL вставлять не хочет((
import requests
import unidecode as unidecode
from bs4 import BeautifulSoup
import csv
import os
URL = 'https://www.avito.ru/sankt_peterburg_i_lo/telefony/mobilnye_telefony/apple-ASgBAgICAkS0wA3OqzmwwQ2I_Dc?f=ASgBAgECA0SywA36gTy0wA3OqzmwwQ2I_DcBRcaaDBV7ImZyb20iOjAsInRvIjo1MzAwMH0&q=iphone+12&s=104 '
HOST = 'https://www.avito.ru'
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/95.0.4638.54 Safari/537.36', 'accept': '*/*'}
FILE = 'phones.csv'
def get_html(url, params=None):
r = requests.get(url, headers=headers, params=params)
return r
def get_pages_count(html):
soup = BeautifulSoup(html, 'html.parser')
pagination = soup.find_all('span', class_='pagination-item-JJq_j')
if pagination:
return int(pagination[-2].get_text())
else:
return 1
def get_content(html):
soup = BeautifulSoup(html, 'html.parser')
items = soup.find_all('div',
class_='iva-item-root-Nj_hb photo-slider-slider-_PvpN iva-item-list-H_dpX '
'iva-item-redesign-nV4C4 iva-item-responsive-gIKjW items-item-My3ih '
'items-listItem-Gd1jN js-catalog-item-enum')
# print(items)
phones = []
for item in items:
rub_price = item.find('span', class_='price-text-E1Y7h text-text-LurtD text-size-s-BxGpL').get_text()
phones.append({
'title': item.find('div', class_='iva-item-titleStep-_CxvN').get_text(),
'link': HOST + item.find('a', class_='link-link-MbQDP link-design-default-_nSbv title-root-j7cja '
'iva-item-title-_qCwt title-listRedesign-XHq38 '
'title-root_maxHeight-SXHes').get('href'),
'price': unidecode.unidecode(rub_price)
})
return phones
def save_file(items, path):
with open(path, 'w', newline='') as file:
writer = csv.writer(file, delimiter=';')
writer.writerow(['Наименование', 'Ссылка', 'Цена'])
for item in items:
writer.writerow([item['title'], item['link'], item['price']])
def parse():
URL = input('Введите URL: ')
URL = URL.strip()
html = get_html(URL)
if html.status_code == 200:
phones = []
pages_count = get_pages_count(html.text)
for page in range(1, pages_count + 1):
print(f'Парсинг страницы {page} из {pages_count}...')
html = get_html(URL, params={'&p': page})
phones.extend(get_content(html.text))
print(URL)
print()
print(f'Получено {len(phones)} телефонов')
save_file(phones, FILE)
os.startfile(FILE)
else:
print('Error')
parse()
Очень частный случай, в моем случае это не помогает, мне же надо чтобы цикл начался заново а не продолжился пропустив это значение, как этого добиться?
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.