Я пытаюсь получить информацию о номере мобильного / служебного телефона на этом сайте: https: // www .zillow.com / кредитора профиль / DougShoemaker /

Я пытался поиграть с BS4, но я могу получить только первый номер телефона. Я пытаюсь получить как офисные, так и мобильные номера.

from selenium import webdriver
from bs4 import BeautifulSoup
import time


#Chrome webdriver filepath...Chromedriver version 74
driver = webdriver.Chrome(r'C:\Users\mfoytlin\Desktop\chromedriver.exe')
driver.get('https://www.zillow.com/lender-profile/DougShoemaker/')
soup = BeautifulSoup(driver.page_source, 'html.parser')
time.sleep(2)
phoneNum = driver.find_element_by_class_name('zsg-list_definition')
trial = phoneNum.find_element_by_class_name('zsg-sm-hide')
print(trial.text)
0
mcfoyt 1 Июл 2019 в 22:40

2 ответа

Лучший ответ

Попробуйте следовать xpath для каждого номера телефона

Office Phone:
//dt[contains(text(),'Office')]/following-sibling::dd/div/span
Cell Phone:
//dt[contains(text(),'Cell')]/following-sibling::dd/div/span
Fax Number:
//dt[contains(text(),'Fax')]/following-sibling::dd/div/span
0
Sureshmani 1 Июл 2019 в 19:53

Вам не нужно использовать Selenium или даже BeautifulSoup. Если вы проверяете сетевые запросы от Developer Tools (F12) > Network, вы можете видеть, что данные извлекаются с использованием XHR-запроса.

enter image description here

Вы можете сделать этот запрос самостоятельно и использовать ответ JSON в любом случае.

POST https://mortgageapi.zillow.com/getRegisteredLender?partnerId=RD-CZMBMCZ
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0
Referer: https://www.zillow.com/lender-profile/DougShoemaker/
Content-Type: application/json

{
  "fields": [
    "aboutMe",
    "address",
    "cellPhone",
    # ... other fields
    "website"
  ],
  "lenderRef": {
    "screenName": "DougShoemaker"
  }
}

Теперь с requests библиотекой вы можете попробовать:

import requests

if __name__ == '__main__':
    payload = {
        "fields": [
            "screenName",
            "cellPhone",
            "officePhone",
            "title",
        ],
        "lenderRef": {
            "screenName": "DougShoemaker"
        }
    }

    res = requests.post('https://mortgageapi.zillow.com/getRegisteredLender?partnerId=RD-CZMBMCZ',
                        json=payload)
    res.raise_for_status()
    data = res.json()

    cellphone, office_phone = data['lender']['cellPhone'], data['lender']['officePhone']
    cellphone_num = '({areaCode}) {prefix}-{number}'.format(**cellphone)
    office_phone_num = '({areaCode}) {prefix}-{number}'.format(**office_phone)
    print(office_phone_num, cellphone_num)

Который печатает:

(618) 619-4120 (618) 795-0790
2
abdusco 1 Июл 2019 в 20:03