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

Нужно спарсить номера телефонов, но они появляются полсе нажатии на кнопку, как их спарсить?

import requests
from bs4 import BeautifulSoup
import lxml
import json
num_of_page = 1

for i in range(num_of_page):
    url = 'https://blizko.ru/gde_kupit_kvartiru/agentstva_nedvizhimosti?page=' + str(i + 1)
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')
    bio = soup.find_all('p', class_='cli-description')
    name = soup.find_all('a', class_='cli-title js-cli-title js-ykr-action')
    number = soup.find_all('span', class_='"phone-')
    for i in range(0, len(bio)):
        print(bio[i].text)
        print('--' + name[i].text)
urr = 'https://blizko.ru/phones?company=13528112&count=3&hit_visits_statistics=true'
phone = requests.get(urr).json()
print(phone)

Вот такой код, статичные данные я уже вывел. но вот номер телефона....
  • Вопрос задан
  • 397 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
@PavelMos
from selenium import webdriver
import selenium
import time

driver=webdriver.Chrome('C:\\inst\\chromedriver_win32\\chromedriver.exe')
page2='https://____.ru/gde_kupit_kvartiru/agentstva_nedvizhimosti?page=1'

driver.get(page2)
time.sleep(3)
driver.find_element(selenium.webdriver.common.by.By.XPATH,
                    f'//*[@class="show-"]').click()
time.sleep(4) #я задержку ставил на всякий случай, возможно, сработает и без неё, если там совсем никто с парсерами не борется
try:
    a=driver.find_element(selenium.webdriver.common.by.By.XPATH,
                    f'//li[contains(@class, "phone-")]').text
    print ('a=', a)
except Exception:
    print (Exception)
try:
    b=driver.find_element(selenium.webdriver.common.by.By.XPATH,
                    f'//a[contains(@href, "tel:+")]').text
    print ('b=', b)
except Exception:
    print (Exception)

C:\Python36\python.exe C:/py/selen1.py
a= +7 (926) 626-28-66
b= +7 (926) 626-28-66

Возможно, имея список фирм с их id типа ".../phones?company=14402101" можно по этим номерам перебрать
Еще имхо надо потом удалить из вопроса url сайта а то вдруг найдут и поставят защиту, хотя сайт явно не такой продвинутый в этом плане как крупные.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
а) разобраться, как сайт получает номер телефона, и повторить. Если номер подгружается отдельным запросом, выяснить каким, попробовать сделать запрос самому. Если номер спрятан в теле страницы, выяснить где, как он зашифрован, извлечь. расшифровать. Муторно, но требует меньше ресурсов.
б) вместо requests использовать безголовый браузер (selenium), имитировать клик на кнопку, пусть сайт сам всё за нас сделает. Легче, но такие вещи прожорливы по памяти и CPU.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽