Проанализируйте карту Airdna, наведите курсор на текст с помощью Selenium

#python #selenium #selenium-webdriver #web-scraping #beautifulsoup

Вопрос:

Я пытаюсь удалить данные из окна, которое появляется при наведении указателя мыши на маркер в режиме просмотра карты, и удалить значение «Доступные дни» из окна.

изображение текста, которое я пытаюсь очистить

Я изо всех сил пытаюсь навести курсор на все фиолетовые маркеры один за другим в режиме просмотра карты с помощью python, webdriver и BeautifulSoup. Мне удалось написать приведенный ниже код, но переменная mapMarkers всегда пуста.

 from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.airdna.co/vacation-rental-data/app/us/california/santa-monica/overview")

                                                                                                        
input("Press Enter to continue...")  # wait until page loads and tutorial is closed

mapMarkers = driver.find_elements_by_class_name("Page__RightColumn-sc-291lxm-3")  # get a list of marker element

target_list = []

for i in range(len(mapMarkers)):
    mapMarkers[i].click() # click to appear hover over window
    html = driver.page_source
    soup = BeautifulSoup(html, "lxml")

    days = soup.find_all("p", {"class": ['info-window__statistics-value']})
    link   = soup.find_all("a", {"class": ['info-window__property-link']})
    target_list.append( { 
        days[0].text.replace('n', '').replace(' ', ''), 
        link[0].attrs['href'] 
    } )


driver.quit()
 

Это ссылка на веб-сайт.

Ответ №1:

Некоторые сайты используют частный API для извлечения своих данных, и ваш сайт является одним из них Для получения данных API, необходимых для проверки сетевой активности.

щелкните правой кнопкой мыши на странице и нажмите Проверить, чтобы открыть DevTools. Перейдите в раздел «Сеть» и найдите API, затем нажмите «Предварительный просмотр», чтобы просмотреть содержимое.

введите описание изображения здесь

Щелкните правой кнопкой мыши, а затем скопируйте curl, а затем переведите команду на python с помощью этого сайта

введите описание изображения здесь

Ваш код будет выглядеть следующим образом:

 import requests

headers = {
    'authority': 'api.airdna.co',
    'sec-ch-ua': '"Chromium";v="94", "Google Chrome";v="94", ";Not A Brand";v="99"',
    'sec-ch-ua-mobile': '?0',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36',
    'sec-ch-ua-platform': '"Windows"',
    'accept': '*/*',
    'origin': 'https://www.airdna.co',
    'sec-fetch-site': 'same-site',
    'sec-fetch-mode': 'cors',
    'sec-fetch-dest': 'empty',
    'referer': 'https://www.airdna.co/',
    'accept-language': 'en-US,en;q=0.9',
}

params = (
    ('access_token', 'MjkxMTI|8b0178bf0e564cbf96fc75b8518a5375'),
    ('city_id', '59053'),
    ('start_month', '10'),
    ('start_year', '2018'),
    ('number_of_months', '36'),
    ('currency', 'native'),
    ('show_regions', 'true'),
)

response = requests.get('https://api.airdna.co/v1/market/property_list', headers=headers, params=params)

results = response.json()["properties"]

for result in results[0:20]:
    title = result["title"]
    days_available = result["days_available"]
    print (f"{title} : {days_available}")
 
 

Результат:

 Panoramic Ocean View Studio Loft : 274
Private 1906 Bungalow : 364
Serene Garden Room by the Beach!!! : 188
Bright New Beachside Master Suite : 171
Bright New Beachside Bedroom : 164
Pvt bedroom-pvt bath amp; entryway. Ocean front Views : 155
Elegant Design Apartment with Courtyard Garden Dining Space : 224
Liz''s Beachy Retreat in Santa Monica! : 55
Santa Monica One BedRoom Apt.(Ocean Breeze B) : 26
ROOM amp; BATH. 4 BLOCKS TO OCEAN. N OF WILSHIRE. : 114
Comfy Room - Amazing Location! : 178
Steps to Beach in Gorgeous Suite! : 84
Stunning Three Bedroom Santa Monica Beach Home : 224
Santa Monica with parking/Montana close to beach : 156
PRIVATE ROOM W/BR IN SANTA MONICA : 293
Private Room with Bathroom at Beach :)Just Perfect : 334
Newly Furnished! 1 Bed Beach Condo : 45
Santa Monica Beach House!Prime area : 264
Santa Monica Canyon Pied-a-Terre : 355
Santa Monica Beach Suite 5 : 276
 

Комментарии:

1. Большое спасибо! это лучше, чем то, что я искал.

2. Всегда пожалуйста 🙂