В сегодняшнюю цифровую эпоху, когда информация имеет решающее значение, веб-скрапинг стал ценным инструментом для извлечения скрытой информации из онлайн-сред. Поскольку рынок недвижимости становится все более конкурентным и сложным, сбор полных и актуальных данных как никогда важен. В этой статье мы погружаемся в мир веб-скрапинга и уделяем особое внимание его огромному потенциалу для извлечения ценной информации из списков 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. Это позволяет профессионалам и энтузиастам принимать взвешенные решения и получать конкурентные преимущества на динамично развивающемся рынке недвижимости.
Полный набор данных можно найти здесь.
Всю демонстрацию кода можно найти здесь.