Хочу реализовать следующее в своем парсере: пользователь вставляет ссылку на категорию в авито, к примеру:
Ссылка удалена модератором. -ASgBAgICAkSSA8gQ8AeQUg?s=104&user=1
И дальше мне нужно вытащить ссылку с параметрами, которую можно найти в feth запросах ( в инструменте разработчика api/11/items). Параметры как раз таки нужны, чтобы можно было произвести парсинг по нужной категории и фильтрам. Ссылка с параметрами выглядит примерно так:
Ссылка удалена модератором. items?key=af0deccbgcgidddjgnvljitntccdduijhdinfgjgfjir&locationId=637640&localPriority=0&footWalkingMetro=0&categoryId=24¶ms[201]=1060¶ms[504]=5256¶ms[122383]=1¶ms[110688]=458589&owner=private&sort=date&page=1&lastStamp=1669965120&display=list&limit=25&presentationType=serp
(locationId=637640&localPriority=0&footWalkingMetro=0&categoryId=24¶ms[201]=1060¶ms[504]=5256¶ms[122383]=1¶ms[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)
Есть у кого какие идеи решить эту задачу без Селениума?