요르단, 워싱턴의 마리화나 생산자들을 긁다
여보세요. 이 게시물의 목표는 워싱턴의 마리화나 생산자의 법적 이름을 찾는 것입니다. 이는 이러한 생산자에게 마케팅하려는 사람에게 유용할 것입니다. 법적 이름으로 워싱턴 국무장관에게 소유자를 확인할 수 있습니다.
이를 위해 두 개의 다른 사이트를 사용하고 있습니다. 첫 번째 502data.com 에는 모든 생산자의 목록이 있지만 법적 이름은 없습니다. 두 번째 TopShelfData 에는 회사의 법적 이름이 있습니다. 이 법적 이름을 사용하면 워싱턴주 국무장관에게서 비즈니스 정보를 쉽게 찾을 수 있습니다.
502data.com
502data.com을 빠르게 조사한 결과 프레임워크에 Angularjs을 사용하고 있음이 분명해졌습니다. 이 사실을 알고 있었기 때문에 데이터와 함께 XHR 요청을 볼 수 있을 것이라고 충분히 예상했습니다. 하지만 https://502data.com/allproducerprocessors으로 가는 요청은 두 개뿐이었습니다. 둘 다 관련 정보가 없었습니다.
이것은 정말 나를 혼란스럽게 했다. 페이지 로드 시 데이터가 분명히 없었습니다. 모든 자바스크립트가 렌더링되기 전의 모습을 보십시오.
내 다음 단계는 자바 스크립트를 통과하는 것이 었습니다. 데이터가 XHR을 통해 가져온 경우 javascript의 어딘가에서 참조되어야 합니다. 그러나이 스크립트 파일을 보면 앱 자체를 관리하는 것으로 나에게 부름받은 것은 없습니다.
다음 중지는 루트 페이지였습니다. 스크립트 태그를 살펴보다가 마침내 페이지 하단에서 내가 찾던 것을 찾았습니다. 공동 자금.
$scope.licenses
참조 ? 그것이 내가 찾고 있는 것입니다. 워싱턴에 있는 모든 마리화나 생산자들의 거대한 배열입니다. 길이를 확인하면 1500이 넘었습니다.전에는 스크립트 데이터를 얻기 위해 cheerio를 사용한 적이 없었지만 꽤 간단하다는 것이 밝혀졌습니다.
const url = 'https://502data.com/allproducerprocessors';
const axiosResponse = await axios.get(url);
const $ = cheerio.load(axiosResponse.data);
const script = $('script:nth-of-type(7)').html();
const scriptSplit = script?.split('$scope.licenses = ');
let arrayOfbusinesses: any[] = [];
if (scriptSplit) {
arrayOfbusinesses = JSON.parse(scriptSplit[1].split(';')[0]);
}
일반적인 선택기와 유일한 차이점은
html()
대신 text()
를 사용한다는 것입니다. 그런 다음 원하는 부분만 찾을 때까지 html을 분할했습니다. 그렇다면 그것은 단순히 JSON.parse()
의 문제였습니다.밤. 그런 식으로 생산자가 있습니다. 이제 법적 이름을 얻으십시오.
TopShelfData
꺼지면 TopShelfData으로 이동합니다. 등록된 이름은 우리가 찾고 있는 항목입니다.
502data.com에서 가져온 데이터는 다음과 같습니다.
{
"licensenumber": "78256",
"name": "EVERGREEN HERBAL",
"tier": 0,
"city": "SEATTLE",
"county": "KING",
"totalSales": 26827987.182500,
"ytdSales": 2887764.770000,
"lastMonthSales": 588414.440000
}
따라서 위의 데이터를 위 그림의 URL로 변환해야 합니다. 처음에는 모든 것을 소문자로 바꾸고 공백을 대체하기 위해 대시를 넣을 수 있다고 생각했습니다. 그러나 같은 이름을 가진 비즈니스가 둘 이상인 경우 문제가 발생합니다. 위의 사진에서 볼 수 있듯이 URL 끝에 1이 있습니다.
그래서… TopShelfData가 어떻게 범위를 좁혔는지 검색해 보았습니다.
빵. 우리는 사업을 하고 있습니다. 검색은 XHR 결과를 반환합니다. 그래서 방금 내 비즈니스 이름을 쿼리로 제출한 다음 동일한 도시가 포함된 제안에서 비즈니스를 찾습니다.
export async function getSlugFromTopShelfData(businessName: string, city: string): Promise<IBusinessSearchData> {
const url = `https://www.topshelfdata.com/search?query=${businessName}`;
const convertedCity = city.toLocaleLowerCase().replace(/\s/g, '-');
const axiosResponse = await axios.get(url);
const suggestions = axiosResponse.data?.suggestions;
const foundBusiness = suggestions.find(suggestion => suggestion?.data?.address_city.includes(convertedCity));
return foundBusiness?.data;
}
이를 통해 URL로 직접 이동하여 비즈니스의 법적 이름을 얻는 것은 단순히 문제였습니다.
export async function checkTopShelfDataDetails(businessSearchData: IBusinessSearchData) {
const url = `https://www.topshelfdata.com/wa/${businessSearchData.address_city}/${businessSearchData.slug}`;
let axiosResponse: AxiosResponse;
try {
axiosResponse = await axios.get(url);
}
catch (e) {
console.log('e', e.response ? e.response.status : e.errno);
throw '';
}
const $ = cheerio.load(axiosResponse.data);
const title = $('.business-info div:nth-of-type(3) a').text();
console.log('title', title);
}
완료. 아주 재미있는 스크랩!
Demo code here
비즈니스 리드를 찾고 계십니까?
여기javascriptwebscrapingguy.com에서 설명한 기술을 사용하여 멋진 웹 데이터에 액세스하는 방법을 시작할 수 있었습니다. 자세한 내용은 Cobalt Intelligence에서 알아보세요!
게시물 Jordan Scrapes Washington’s Marijuana Producers이 JavaScript Web Scraping Guy에 처음 나타났습니다.
Reference
이 문제에 관하여(요르단, 워싱턴의 마리화나 생산자들을 긁다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aarmora/jordan-scrapes-washington-s-marijuana-producers-184l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)