요르단 스크랩 국무 장관 : 앨라배마
위의 사진은 USS Alabama입니다. 퇴역한 제2차 세계 대전 전함의 매우 멋진 박물관입니다. Secretary of State web scraping series 의 18번째 게시물로 이동합니다. 비즈니스 리드를 얻기 위해 앨라배마 주 국무장관에 대한 웹 스크래핑을 수행할 예정입니다.
나는 플로리다의 팬핸들에서 조금 살았고 앨라배마의 모빌은 차로 불과 몇 시간 거리에 있었습니다. 시원한 곳이었고 가장 가까운 코스트코가 있어서 꽤 많이 방문했습니다.
조사
가장 최근에 등록된 업체를 찾으려고 노력합니다. 그들은 새로운 서비스와 제품으로 설정을 시도하고 아마도 기존 관계가 없을 가능성이 높은 비즈니스입니다. 나는 일반적으로 이것이 더 가치있는 리드가 될 것이라고 생각합니다.
주에서 검색할 날짜 범위를 제공하지 않는 경우 꽤 잘 작동하는 트릭을 발견했습니다. 저는 그냥 "2020"을 검색합니다. 2020년은 눈에 띄는 숫자이며 현재 우리가 그 해에 있기 때문에 사람들은 그 이름을 가진 사업을 시작하는 경향이 있습니다.
최근에 등록된 이들 중 하나를 찾으면 어딘가에서 비즈니스 ID를 찾습니다. 일반적으로 URL의 쿼리 매개변수 또는 POST 요청의 양식 데이터입니다. 어느 쪽이든 해당 ID를 하나 증가시켜도 최근에 등록된 회사를 얻을 수 있다면 내가 검색하는 ID를 증가시키는 것만으로 최근에 등록된 회사를 찾을 수 있다는 것을 압니다.
여기에서 "2020"에 대한 검색 결과를 볼 수 있습니다. 이 숫자 사이의 대시는 처음에는 오름차순이 아닐 수도 있지만 알파 문자가 없으므로 희망적이라고 생각합니다.
643-391을 클릭하면 저here가 걸립니다.
가장 먼저 눈에 띄는 점은 최근에 등록된 업체가 있는 것 같습니다. 더 큰 것이 일반적으로 더 최근을 의미하는지 확인하기 위해 잠시 후에 몇 가지를 더 확인할 것입니다.
해당 URL을 살펴보는 것도 좋습니다. http://arc-sos.state.al.us/cgi/corpdetail.mbr/detail?corp=643391&page=name&file=&type=ALL&status=ALL&place=ALL&city= 이러한 추가 쿼리 매개변수 항목은 필요하지 않습니다. 그것들을 제거해도 여전히 이 페이지가 정상적으로 반환됩니다. 그러나 도시 및 비즈니스 유형과 같은 다른 항목으로 필터링할 수 있다는 것을 알려주는데 이는 매우 깔끔합니다.
빠른 증분을 수행하면 더 큰 ID가 실제로 더 최신임을 알 수 있습니다. 좋습니다. 시작했습니다.
코드
상단 블록은 대부분의 주에서 사용되는 동일한 종류의 수식입니다. 우리는 특정 ID에서 시작하여 반복하고 별도의 기능에서 세부 사항을 처리합니다.
(async () => {
const startingId = 642999;
for (let i = 0; i < 1000; i+=50) {
await getDetails(startingId + i);
await timeout(1000);
}
})();
선택기는 조금 더 복잡했지만 Vermont과 같은 상태의 패턴을 사용하여 간단한 스위치를 만들었습니다.
const informationFields = $("#block-sos-content tr ");
for (let i = 0; i < informationFields.length; i++) {
const cells$ = cheerio.load(informationFields[i]);
const label = cells$(".aiSosDetailDesc").text();
const value = cells$(".aiSosDetailValue").text();
주요 문제는 표시되는 데이터가 항상 같은 위치에 있지 않기 때문에 인덱스를 사용할 수 없다는 것입니다. 따라서 위와 같이 원하는 데이터가 있는 모든 행을 가져옵니다. 그런 다음… 루프를 통해 레이블과 값을 선택합니다.
우리가 원하는 데이터만 얻을 수 있도록 하는 정말 깔끔한 방법입니다. 전체 기능은 다음과 같습니다.
async function getDetails(sosId: number) {
const axiosResponse = await axios.get(`http://arc-sos.state.al.us/cgi/corpdetail.mbr/detail?corp=${sosId}`);
const $ = cheerio.load(axiosResponse.data);
const business: any = {};
const title = $("thead:nth-of-type(1) tr:first-child td:first-child").text();
business.title = title.trim();
const informationFields = $("#block-sos-content tr ");
for (let i = 0; i < informationFields.length; i++) {
const cells$ = cheerio.load(informationFields[i]);
const label = cells$(".aiSosDetailDesc").text();
const value = cells$(".aiSosDetailValue").text();
switch (label) {
case 'Entity ID Number':
business.idNumber = value;
break;
case 'Formation Date':
business.formationDate = value.replace(/\n/g, "").trim();
break;
case 'Registered Office Street Address':
business.address = value.trim();
break;
case 'Registered Agent Name':
business.agentName = value.replace(/\n/g, "").trim();
break;
// Qualify date varies widely compared to formation date when it is a foreign business
case 'Qualify Date':
business.qualifyDate = value;
break;
case 'Entity Type':
business.entityType = value;
break;
default:
break;
}
}
console.log("business", business);
}
그리고 그게 다야. 우리는 해냈다. 우리는 최근에 등록된 사업체에 대해 앨라배마주 국무장관을 긁어모았습니다.
Demo code here
비즈니스 리드를 찾고 계십니까?
여기javascriptwebscrapingguy.com에서 설명한 기술을 사용하여 멋진 웹 데이터에 액세스하는 방법을 시작할 수 있었습니다. 자세한 내용은 Cobalt Intelligence에서 알아보세요!
게시물 Jordan Scrapes Secretary of State: Alabama이 JavaScript Web Scraping Guy에 처음 나타났습니다.
Reference
이 문제에 관하여(요르단 스크랩 국무 장관 : 앨라배마), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aarmora/jordan-scrapes-secretary-of-state-alabama-2kj2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)