Задать вопрос
@ubirust

Как перекодировать ссылку для парсинга Авито?

Хочу реализовать следующее в своем парсере: пользователь вставляет ссылку на категорию в авито, к примеру:
Ссылка удалена модератором. -ASgBAgICAkSSA8gQ8AeQUg?s=104&user=1


И дальше мне нужно вытащить ссылку с параметрами, которую можно найти в feth запросах ( в инструменте разработчика api/11/items). Параметры как раз таки нужны, чтобы можно было произвести парсинг по нужной категории и фильтрам. Ссылка с параметрами выглядит примерно так:

Ссылка удалена модератором. items?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir&locationId=637640&localPriority=0&footWalkingMetro=0&categoryId=24&params[201]=1060&params[504]=5256&params[122383]=1&params[110688]=458589&owner=private&sort=date&page=1&lastStamp=1669965120&display=list&limit=25&presentationType=serp
(locationId=637640&localPriority=0&footWalkingMetro=0&categoryId=24&params[201]=1060&params[504]=5256&params[122383]=1&params[110688]&presentationType=serp)


Сейчас у меня эта задача выполняется с помощью Selenium, но я хочу делать это без него, вот код:
import undetected_chromedriver as uc
from undetected_chromedriver import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time


def generate_avito_data(link_avito):
    options = uc.ChromeOptions()

    options.add_argument('--user-agent=Mozilla/5.0 (Linux; Android 9; SAMSUNG SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/15.0 Chrome/90.0.4430.82 Mobile Safari/537.36')

    #web = "https://m.avito.ru/moskva/kvartiry/sdam/na_dlitelnyy_srok-ASgBAgICAkSSA8gQ8AeQUg?radius=0&s=104&user=1&presentationType=serp"
    web = link_avito
    path = 'C:/Users/Rustamag/PycharmProjects/sigmaparserbot/chromedriver.exe'

    with uc.Chrome(options=options, executable_path=path) as driver:
        driver.get(web)
        # ждем появления кнопки
        button = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located(
                (By.XPATH, '//*[@id="app"]/div/div[1]/div/div[1]/div[2]/div[1]/div[2]/button[2]'))
        )
        button.click()

        # ждем появления второй кнопки
        button2 = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, '//*[@id="modalPage"]/div/div/div[3]/div/button'))
        )
        button2.click()
        time.sleep(3)
        #driver.refresh()
        #time.sleep(2)
        api_link = None
        for entry in driver.execute_script("return window.performance.getEntries()"):
            if 'api/11/items' in entry['name']:
                if 'page=1' in entry['name']:
                    api_link = entry['name']
                    break
                elif 'lastStamp' in entry['name'] and 'display' in entry['name'] and 'limit' in entry['name']:
                    api_link = entry['name']
                    break
        print(api_link)
        driver.quit()
        return api_link

#link_avito = 'Ссылка удалена модератором. -ASgBAgICAkSSA8gQ8AeQUg?s=104&user=1'
#generate_avito_data(link_avito)


Есть у кого какие идеи решить эту задачу без Селениума?
  • Вопрос задан
  • 300 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы