В сегодняшнюю цифровую эпоху, когда информация имеет решающее значение, веб-скрапинг стал ценным инструментом для извлечения скрытой информации из онлайн-сред. Поскольку рынок недвижимости становится все более конкурентным и сложным, сбор полных и актуальных данных как никогда важен. В этой статье мы погружаемся в мир веб-скрапинга и уделяем особое внимание его огромному потенциалу для извлечения ценной информации из списков Zillow. Мы на собственном опыте покажем, насколько простым и эффективным может быть парсинг при правильном сборе данных Zillow.

Глядя на списки Zillow для Сан-Диего, Калифорния, вместе с исходным кодом страницы, мы видим, что информация о листинге хранится в простом скрипте. Этот скрипт обычно имеет идентификатор __NEXT_DATA__, но иногда вместо этого имеет атрибут данных mobileSearchPageStore. При очистке будет важно проверить оба.

Нам нужно будет найти способ собирать и извлекать данные с помощью языка программирования. В этом примере мы будем использовать Javascript. Есть несколько полезных библиотек, которые упростят эту работу. Все они могут быть установлены с помощью менеджера пакетов узла, npm.

import fetch from 'node-fetch'
import * as cheerio from 'cheerio'
import fs from 'fs'
import { Parser } from '@json2csv/plainjs';

Во-первых, мы устанавливаем желаемое количество страниц для очистки, указанное переменной «pagesToLoop», которая в данном случае имеет значение 3. Затем мы инициируем цикл, в котором кодируется URL-адрес, соответствующий текущей странице для очистки. После успешного кодирования полный HTML-код страницы очищается и затем анализируется с помощью Cherio. Как упоминалось ранее, наша цель — найти скрипт с именем «NEXT_DATA» или «mobileSearchPageStore». После успешной идентификации скрипта мы извлекаем его данные и конвертируем в формат JSON. Эти извлеченные данные затем добавляются к нашему существующему списку данных листинга, известному как «finalJsonArray». После повторения этого процесса для всех трех страниц мы приступаем к преобразованию накопленных данных JSON в формат CSV. Полученные результаты сохраняются в файле с именем «ListingData.csv».

(async () => {
    const pagesToLoop = 3
    let finalJsonArray = []

    for (let i = 0; i < pagesToLoop; i++) {
        const urlParams = `{"pagination":{"currentPage":${i + 1}}}`
        const encodedUrl = "https://www.zillow.com/san-diego-ca/2_p/?searchQueryState=" + encodeURIComponent(urlParams)

        const response = await fetch(encodedUrl, {
            headers: {
                "user-agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36",
            }
        })

        const text = await response.text()
        const $ = cheerio.load(text)

        let script = $('#__NEXT_DATA__')
        if(script.length == 0) script = $("#wrapper > script:nth-child(9)")

        const json = JSON.parse(script.text().replaceAll("<!--", "").replaceAll("-->", ""))

        if(json.cat1)
            finalJsonArray = finalJsonArray.concat(json.cat1.searchResults.listResults)
        else 
            finalJsonArray = finalJsonArray.concat(json.props.pageProps.searchPageState.cat1.searchResults.listResults)
    }

    const csv = new Parser().parse(finalJsonArray);
    fs.writeFileSync("ListingData.csv", csv)

})()

Вот краткое изложение собранных данных, включая информацию о ценах, соответствующие URL-адреса изображений и идентификационные номера Zillow. Полный набор данных также содержит дополнительные сведения, такие как адреса собственности, площадь в квадратных метрах, количество спален и ванных комнат, а также даты, относящиеся к дням открытых дверей.

В заключение, веб-скрапинг предоставляет мощное решение для получения ценных данных о недвижимости. Используя инструменты и методы, такие как Javascript, библиотеки, такие как Cheerio, и преобразование CSV, пользователи могут эффективно извлекать и анализировать информацию со страниц со списками Zillow. Это позволяет профессионалам и энтузиастам принимать взвешенные решения и получать конкурентные преимущества на динамично развивающемся рынке недвижимости.

Полный набор данных можно найти здесь.
Всю демонстрацию кода можно найти здесь.