@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)

Вот такой код, статичные данные я уже вывел. но вот номер телефона....
  • Вопрос задан
  • 342 просмотра
Решения вопроса 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.
Ответ написан
Ваш ответ на вопрос

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

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