ヨルダンは、ワシントンのマリファナ製作者を掻き取ります


Demo code here
こんにちは.このポストの目標は、ワシントンのマリファナの生産者の合法的な名前を見つけることです.これは、これらの生産者に市場を希望した人に役立つでしょう.あなたはワシントン州の国務長官の所有者を確認することができます.
我々は、これを行うには2つの異なるサイトを使用しています.最初の、502data.comは、すべての生産者のリストを持っていますが、彼らの法律名ではありません.2番目のTopShelfDataは、会社の法的名前を持っています.この法律名を使用すると、簡単にワシントン州国務長官からのビジネス情報を見つけることができます.

502データ。コム



502データの迅速な検査の後.彼らがフレームワークのためにAngularjsを使っていたことは明らかでした.これを知って、私は完全にデータとXHRの要求を見ることができることを期待.しかし、https://502data.com/allproducerprocessorsに行くことは2つの要求だけでした.関連情報はなかった.

これは本当に私を混乱させた.データは明らかにページロードではなかった.JavaScriptのすべてがレンダリングされる前にそれを見てください.

次のステップはJavaScriptを使うことでした.データがXHR経由でプルされた場合、JavaScriptのどこかで参照する必要があります.しかし、これらのスクリプトファイルを見て、何も私自身にアプリ自体を管理する何かと呼ばれる.

次の停止はルートページでした.私は最終的には、ページの下部に探していたものを見つけました.ジャックポット.
$scope.licensesそれは私が探しているものです.それはワシントンのすべてのマリファナ生産者の巨大な配列です.長さをチェックすると1500以上になった.
私は以前にスクリプトデータを得るためにチェリオを使用しなかったが、それはかなり簡単であることが判明した.
   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に行きます.登録された名前は、我々が探しているアイテムです.

502データからのデータ.COMは以下のようになります.
    {
        "licensenumber": "78256",
        "name": "EVERGREEN HERBAL",
        "tier": 0,
        "city": "SEATTLE",
        "county": "KING",
        "totalSales": 26827987.182500,
        "ytdSales": 2887764.770000,
        "lastMonthSales": 588414.440000
    }
そこで上記のデータを上記の画像からURLに変換する必要があります.最初は、すべてのケースを下げて、スペースを交換するためにダッシュをかけることができると思いました.しかし、私たちは同じ名前のビジネスを1つ以上持っている場合に問題があります.上記の写真で見ることができるように、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);
}
完了.非常に楽しいscrape!
Demo code here

ビジネスリード探しですか?


javascriptwebscrapingguy.comでここで話したテクニックを使用して、我々は素晴らしいウェブデータにアクセスする方法を開始することができました.Cobalt Intelligenceでより多くを学んでください!
Jordan Scrapes Washington’s Marijuana Producers年には、JavaScript Web Scraping Guyが初めて登場した.