Last active
October 12, 2017 06:00
-
-
Save tkbremnes/4f90755ce520fec02a8a67e6d3da1306 to your computer and use it in GitHub Desktop.
Simple scraper for the grain list found on beersmith.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://beersmith.com/Grains/Grains/GrainList.htm | |
var table = document.querySelector("#table2"); | |
var rows = table.querySelectorAll("tr"); | |
var result = []; | |
rows.forEach((row, index) => { | |
if (index === 0) { | |
return; | |
} | |
var cells = row.querySelectorAll("td"); | |
function formatSpecificGravity(_g) { | |
return parseFloat(_g); | |
} | |
function parseColor(color) { | |
const srm = parseInt(color); | |
const ebc = Math.floor(srm * 1.97); | |
const lovibond = Math.floor((srm + 0.76) / 1.3546) | |
return srm; | |
return { | |
srm, | |
ebc, | |
lovibond | |
} | |
} | |
function formatMaxInBatch(_p) { | |
return parseInt(_p) / 100; | |
} | |
function parseType(textType) { | |
switch(textType) { | |
case "Grain": return "GRAIN"; | |
case "Sugar": return "SUGAR"; | |
case "Adjunct": return "ADJUNCT"; | |
case "Dry Extract": return "DRY_EXTRACT"; | |
case "Extract": return "EXTRACT"; | |
} | |
} | |
function parseOrigin(origin) { | |
switch(origin) { | |
case "Belgium": return "BE"; | |
case "Germany": return "DE"; | |
case "US": return "US"; | |
case "United Kingdom": return "UK"; | |
} | |
} | |
function getPotentialYield(gravity) { | |
const ppg = parseInt(gravity.substring(3)) | |
const PPG_SUGAR = 46; | |
return ppg/PPG_SUGAR; | |
} | |
var cellRes = {}; | |
cells.forEach((cell, index) => { | |
switch(index) { | |
case 0: | |
// Name | |
cellRes["name"] = cell.textContent; | |
break; | |
case 1: | |
// Origin | |
cellRes["origin"] = parseOrigin(cell.textContent); | |
break; | |
case 2: | |
// Type | |
cellRes["type"] = parseType(cell.textContent); | |
break; | |
case 3: | |
// Color | |
cellRes["color"] = parseColor(cell.textContent); | |
break; | |
case 4: | |
// Must Mash | |
cellRes["must_mash"] = cell.textContent = "Yes" ? true : false; | |
break; | |
case 5: | |
// Potential SG | |
cellRes["potential_yield"] = getPotentialYield(cell.textContent); | |
break; | |
case 6: | |
// Max in batch | |
cellRes["max_in_batch"] = formatMaxInBatch(cell.textContent); | |
break; | |
} | |
}); | |
result.push(cellRes); | |
}) | |
copy(result) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment