Спарсить номер телефона при нажатии на кнопку

есть страница - https://www.olx.kz/d/obyavlenie/kogtetochka-komplekt-dlya-koshechek-novaya-IDlbDnN.html#b42e4f74fa;promoted

нужно получить номер телефона который показываться только при нажатии на кнопку, сделать желательно только через requests


Ответы (1 шт):

Автор решения: louis

Если правильно понял то нужно спарсить номер телефона со страницы.

Писать парсеры дело не благодарное и рискованное ), т.к. сегодня страницы выглядит так, завтра выглядит по другому. и нужно постоянно обновлять свой парсер.

Плюс многие сайты боряться с парсерами по этому нужно вооружиться терпением ну и dev-tools->network в помощь)

В особо редких случаях можно и wireshark использовать ) Ток надо будет совсем немного пошаманить с расшифровкой SSL но это не обязательно

Примерный план действий:

  1. Нужно посмотреть какие запросы идут на сервере при нажатии кнопки
  2. Какие запросы идут при открытии страницы ( лучше добавить галочку Preserve Log )
  3. Можно банально скопировать fetch или curl введите сюда описание изображения
  4. распарсить html сайта выдрав от туда ID, токен или еще какую нибудь информацию необходимую для последующих запросов

На коленке накидал ( чисто как пример )

import requests, bs4, re

url = "https://www.olx.kz/d/obyavlenie/kogtetochka-komplekt-dlya-koshechek-novaya-IDlbDnN.html#b42e4f74fa;promoted"
# через сессию , т.к. скорее всего понадобиться для последующих запросов
session = requests.Session()

# открыть страницу и получить её html код
response = session.get(url)

# нужно получить ID, он будет необходим в дальнешем для получения номера
# ID можно получить из span элемента по классу css-9xy3gn-Text
# возможно класс будет другим в следующий раз , а может и нет
document = bs4.BeautifulSoup(response.text, 'html.parser')
span_id = document.find("span", class_="css-9xy3gn-Text") 
# оставить только цифры
id = re.sub(r'[^0-9]', '', span_id.text) 
    
# ????
# тут надо подумать как получить токен, надо смотреть в chrome->dev->networks
# и скорее всего где то мелькает в запросах

token = "????"

headers = {
"authorization": "Bearer %s " % token
} 
# url который вызывается после  нажатия кнопки и по которому можно номер телефона получить
url_phone = "https://www.olx.kz/api/v1/offers/%s/limited-phones/" % id
response = session.get(url_phone, proxies=proxies, headers=session.headers)
print(response.text)
→ Ссылка