Задать вопрос
  • Как расшифровать строку url запроса?

    @ramazan8
    Подскажите пожалуйста юнцу)) Суть вопроса примерно та же, только мне нужно как то извлечь параметр страницы из 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()
  • Как выйти из цикла и сразу начать его заново python?

    @ramazan8
    Очень частный случай, в моем случае это не помогает, мне же надо чтобы цикл начался заново а не продолжился пропустив это значение, как этого добиться?