요르단 스크랩 국무 장관 : 앨라배마

Demo code here

위의 사진은 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: AlabamaJavaScript Web Scraping Guy에 처음 나타났습니다.

좋은 웹페이지 즐겨찾기