Skip to content

Instantly share code, notes, and snippets.

@arm5077
Created May 13, 2014 22:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arm5077/42272a00d0b5f8edf62f to your computer and use it in GitHub Desktop.
Save arm5077/42272a00d0b5f8edf62f to your computer and use it in GitHub Desktop.
2014 Pa. Democratic gubernatorial primary scraper
<?PHP
function getURL($url)
{
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//do redirects
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// $output contains the output string
$output = curl_exec($ch);
// close curl resource to free up system resources
curl_close($ch);
return $output;
}
$content = "";
$export = Array();
// Grab the three pages that contain election data
for($i=1; $i <= 3; $i++) {
$content .= getURL("http://www.electionreturns.state.pa.us/Default.aspx?EID=41&ESTID=1&CID=0&OID=3&CDID=0&PID=0&DISTID=1&IsSpecial=0&PageRefID=" . $i);
}
// Split into counties
$counties = explode("<hr", $content);
// For each county...
foreach($counties as $county){
$start = 0;
$temp = Array();
// Make sure this element actually has data
if(stripos( $county, '"officeTitle">')) {
// Get county name
$county_name = ucfirst(scrape($county, '"officeTitle">', "<BR>"));
// Jump to Democratic side
$start = stripos($county, "Democratic", $start);
// Loop through candidates
while( stripos($county, '"grdcandidateName">', $start) ) {
// Grab name
$candidate_name = ucfirst(scrape($county, '"grdcandidateName">', ","));
// Grab number of votes
$votes = intval(scrape($county, 'grdcandidateVotes">', "</td>"));
// Insert candidate into temp array, later to be included in county array
$temp[] = Array("name" => $candidate_name, "votes" => $votes);
}
// Insert entry into county array
$export[] = Array("county" => $county_name, "candidates" => $temp);
}
}
// Print JSON
echo json_encode($export);
function scrape($source, $startPhrase, $endPhrase) {
global $start, $end;
$start = stripos($source, $startPhrase, $start) + strlen($startPhrase);
$end = stripos($source, $endPhrase, $start);
return (trim(substr($source, $start, $end - $start)));
}
?>
[
{
"county": "Adams",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Allegheny",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Armstrong",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Beaver",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Bedford",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Berks",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Blair",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Bradford",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Bucks",
"candidates": [
{
"name": "WOLF",
"votes": 3
},
{
"name": "MCCORD",
"votes": 16
},
{
"name": "MCGINTY",
"votes": 8
},
{
"name": "SCHWARTZ",
"votes": 4
}
]
},
{
"county": "Butler",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Cambria",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Cameron",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Carbon",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Centre",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Chester",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Clarion",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Clearfield",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Clinton",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Columbia",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Crawford",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Cumberland",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Dauphin",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Delaware",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Elk",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Erie",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Fayette",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Forest",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Franklin",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Fulton",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Greene",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Huntingdon",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Indiana",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Jefferson",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Juniata",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Lackawanna",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Lancaster",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Lawrence",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Lebanon",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Lehigh",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Luzerne",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Lycoming",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Mckean",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Mercer",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Mifflin",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Monroe",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Montgomery",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Montour",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Northampton",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Northumberland",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Perry",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Philadelphia",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Pike",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Potter",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Schuylkill",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Snyder",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Somerset",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Sullivan",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Susquehanna",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Tioga",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Union",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Venango",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Warren",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Washington",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Wayne",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
},
{
"county": "Westmoreland",
"candidates": [
{
"name": "WOLF",
"votes": 306
},
{
"name": "MCCORD",
"votes": 612
},
{
"name": "MCGINTY",
"votes": 918
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "Wyoming",
"candidates": [
{
"name": "WOLF",
"votes": 1
},
{
"name": "MCCORD",
"votes": 1
},
{
"name": "MCGINTY",
"votes": 1
},
{
"name": "SCHWARTZ",
"votes": 1
}
]
},
{
"county": "York",
"candidates": [
{
"name": "WOLF",
"votes": 0
},
{
"name": "MCCORD",
"votes": 0
},
{
"name": "MCGINTY",
"votes": 0
},
{
"name": "SCHWARTZ",
"votes": 0
}
]
}
]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment