≪ Today I learned. RSS購読
公開日
タグ
JavaScript
著者
ダーシノ(@bc_rikko)

給付金不正受給者を使ったWebスクレイピング練習

経済産業省が持続化給付金、家賃支援給付金、一時支援金、月次支援金における不正受給者の公表についてという不正受給者リストを公開していた。

不正受給なんで許せないけど、せっかくなので私の勉強の糧になってもらう!

※▶クリックで解答が表示されます。

課題1: 不正受給の件数が多い人を上位3位まで取得してください
const list = Object.entries(
  Array.from(document.querySelectorAll('td:nth-child(2)'))
    .map(a => a.innerText.replace(/\s/g, ''))
    .reduce((r, n) => {
      Object.hasOwn(r, n) ? r[n] += 1 : r[n] = 1
      return r
    }, {})
).sort((a, b) => b[1] - a[1])

console.log('1.', list[0]) // 1. ['泉勝彦', 9]
console.log('2.', list[1]) // 2. ['阪口円', 8]
console.log('3.', list[2]) // 3. ['相良秀一', 8]
課題2: 不正受給額が多い人(法人含む)を上位3位まで取得してください
const list = Object.entries(
  Array.from(document.querySelectorAll('tr')).map(e => {
    return {
      n: e.querySelector(':nth-child(2)').innerText.replaceAll(/\s/g, ''),
      p: Number(e.querySelector(':nth-child(3)').innerText.replaceAll(/[^0-9\.-]+/g,""))
    }
  })
    .reduce((r, o) => {
      Object.hasOwn(r, o.n) ? r[o.n] += o.p : r[o.n] = o.p
      return r
    }, {})
).sort((a, b) => b[1] - a[1])

console.log('1.', list[0]) // 1. ['泉勝彦', 25699986]
console.log('2.', list[1]) // 2. ['𡈽山昭貞', 6849998]
console.log('3.', list[2]) // 3. ['株式会社ソニックワークス', 5899998]