조던이 레드핀을 긁다
비디오 워크스루
오늘은 Redfin으로 갑니다! 이것은 부동산 데이터 경기장에 있습니다. 스크래핑에 대해 쓴 게시물real estate auctions과 짝을 이루는 종류입니다. 찾고 있는 경매를 얻은 다음 Redfin.com으로 이동하여 예상 가격 및 기타 데이터를 얻을 수 있습니다.
조사

이렇게 부동산 사이트를 스크랩할 때 정말 두 단계가 있습니다. 첫 번째는 주소를 활용하여 사이트에서 세부 정보 페이지를 찾을 수 있다는 것입니다. 두 번째 부분은 원하는 데이터에 대한 사이트를 스크랩하는 것보다 더 분명합니다.
Redfin은 현대적인 사이트이며 입력할 때 부동산 정보를 실시간으로 반환합니다. 이렇게 하면 사용자가 이 주소의 세부 정보 페이지로 바로 이동할 수 있는 항목이 반환됩니다. 이는 거의 확실하게 세부 정보 페이지로 가는 방법을 찾는 데 사용할 수 있음을 의미합니다.
확인해 봐.

왼쪽에서 검색된 데이터와 발견된 정확한 속성을 볼 수 있습니다. 오른쪽에서 다음 데이터를 반환하는 XHR 요청을 볼 수 있습니다.
{}&&{"version":348,"errorMessage":"Success","resultCode":0,"payload":{"sections":[{"rows":[{"id":"1_60647192","type":"1","name":"3950 Callahan Dr","subName":"Memphis, TN, USA","url":"/TN/Memphis/3950-Callahan-Dr-38127/home/60647192","active":true,"claimedHome":false,"invalidMRS":false,"businessMarketIds":[58],"countryCode":"US"}],"name":"Addresses"}],"exactMatch":{"id":"1_60647192","type":"1","name":"3950 Callahan Dr","subName":"Memphis, TN, USA","url":"/TN/Memphis/3950-Callahan-Dr-38127/home/60647192","active":true,"claimedHome":false,"invalidMRS":false,"businessMarketIds":[58],"countryCode":"US"},"extraResults":{},"responseTime":0,"hasFakeResults":false,"isGeocoded":false,"isRedfinServiced":false}}
이 데이터는 JSON이 아니기 때문에 다소 재미있습니다. 첫 번째
{}&&
를 제거하고 나머지는 유효한 JSON입니다. 그리고 안에… URL이 보입니다! 빙고. 우리는 사업을 하고 있습니다.이 URL을 사용하여 찾고 있는 웹 페이지로 바로 이동할 수 있습니다. 상단에서 무엇을 찾을 수 있습니까? 우리가 찾던 부동산 가치!

아쉽게도 세부 정보 페이지에는 속성 데이터가 포함된 XHR 요청이 없습니다. 이것을 확인하는 가장 쉬운 방법은 개발자 도구의 네트워크 탭을 보고 "Doc"탭을 확인하는 것입니다. 요청한 페이지가 완전히 렌더링된 것을 볼 수 있다면 이미 완성된 상태로 서버에서 반환되고 있음을 의미합니다.

이 부분에 대해 cheerio을 사용하고 HTML을 구문 분석하여 원하는 가격을 얻습니다.
코드

여기서 아주 간단한 코드 실행. 모든 것을 처리할 비동기 블록은 다음과 같습니다.
const exampleAddresses = [
'3950 CALLAHAN DR, Memphis, TN 38127',
'17421 Deforest Ave, Cleveland, OH 44128',
'1226 DIVISION AVENUE, San Antonio, TX 78225'
];
(async () => {
for (let i = 0; i < exampleAddresses.length; i++) {
const path = await getUrl(exampleAddresses[i]);
console.log('path', path);
const price = await getPrice(path);
console.log('price', price);
await timeout(2000);
}
})();
대상 주소를 반복하고 URL(실제 경로)을 얻은 다음 가격을 얻을 때 사용합니다.
async function getUrl(address: string) {
// Location and v are required query parameters
const url = `https://www.redfin.com/stingray/do/location-autocomplete?location=${address}&v=2`;
const axiosResponse = await axios.get(url);
const parsedData = JSON.parse(axiosResponse.data?.replace('{}&&', ''));
return parsedData.payload.exactMatch.url;
}
위의 함수는 이상한 거의 JSON에서 경로를 가져옵니다. 데이터를 가져온 다음 교체 기능을 사용하여
{}&&
를 제거합니다.getPrice
함수는 axios을 사용한 간단한 호출이고 cheerio을 사용한 구문 분석입니다.async function getPrice(path: string) {
const url = `https://redfin.com${path}`;
const axiosResponse = await axios.get(url);
const $ = cheerio.load(axiosResponse.data);
let price = $('[data-rf-test-id="avm-price"] .statsValue').text();
if (!price) {
price = $('[data-rf-test-id="avmLdpPrice"] .value').text();
}
return price;
}
빵. 그게 끝입니다. 우리는 Redfin에서 부동산 가격을 얻었습니다.
Demo code here
비즈니스 리드를 찾고 계십니까?
여기javascriptwebscrapingguy.com에서 설명한 기술을 사용하여 멋진 웹 데이터에 액세스하는 방법을 시작할 수 있었습니다. 자세한 내용은 Cobalt Intelligence에서 알아보세요!
게시물 Jordan Scrapes Redfin이 Javascript Web Scraping Guy에 처음 나타났습니다.
Reference
이 문제에 관하여(조던이 레드핀을 긁다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aarmora/jordan-scrapes-redfin-3ma6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)