あいつの日誌β

働きながら旅しています。

weworkremotely.com をスクレイピングしたメモ

英語の勉強しているのですがモチベーションを維持したいなあと思って書いたスクリプトです。

海外で remote worker 向けの求人サイトがあるので時々眺めていると location が Anywhere となっている求人があって「英語話せるようになれば日本に居ながら仕事もらえるんじゃね?」と思ったりしてモチベーションが維持できます。

なんですが詳細ページを開かないと Must be located が表示されないので画面をぽちぽちする時間が無駄な気がした次第です。

const _ = require('lodash')
const chalk = require('chalk');
const scrapeIt = require('scrape-it');

const url = "https://weworkremotely.com/categories/remote-programming-jobs";

main()

async function main() {

  const result = await scrapeIt(url, {
    items: {
      listItem: ".feature",
      data: {
        link: { 
          selector: "a",
          attr: "href"
        }
      }
    }
  })

  const links = result.data.items.map(x => `https://weworkremotely.com${x.link}`)

  const tasks = [];
  for (let i = 0; i < links.length; i++) {
    tasks.push(scrapeIt(links[i], {
      title: ".content h1",
      company: ".company",
      location: ".location",
      region: ".region",
    }))
  }
  const results = await Promise.all(tasks)
  const jobs = results.map(result => Object.assign(
    _.pick(result.data, ['title', 'company', 'location', 'region']),
    { link: result.response.responseUrl }
  ))
  console.log(`Found jobs: ${jobs.length}`)
  jobs.forEach(job => {
    console.log(job.title, job.company, chalk.yellow(job.location), chalk.green(job.region))
    console.log(chalk.underline(job.link))
  })
}

とりあえず何件かは英語を話せればいけそうな求人があるのでモチベーションが維持できる気がしました。おしまい。