Skip to content

Instantly share code, notes, and snippets.

@andreybolonin
Created May 23, 2017 17:12
Show Gist options
  • Select an option

  • Save andreybolonin/6102e03c40f9620a23fe3e45fc6dfed3 to your computer and use it in GitHub Desktop.

Select an option

Save andreybolonin/6102e03c40f9620a23fe3e45fc6dfed3 to your computer and use it in GitHub Desktop.
<?php
declare(strict_types=1);
namespace AppBundle\Provider;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use Symfony\Component\DomCrawler\Crawler;
/**
* Class MonsterComProvider
*
* @package AppBundle\Provider
*/
class MonsterComProvider extends AbstractProvider
{
/**
* @var array
*/
public $url = [
'https://www.monster.com/jobs/browse/q-accounting-jobs.aspx',
'https://www.monster.com/jobs/browse/q-administrative-jobs.aspx',
'https://www.monster.com/jobs/browse/q-advertising-jobs.aspx',
'https://www.monster.com/jobs/browse/q-aeronautics-jobs.aspx',
'https://www.monster.com/jobs/browse/q-agriculture-and-fishing-jobs.aspx',
'https://www.monster.com/jobs/browse/q-animal-services-jobs.aspx',
'https://www.monster.com/jobs/browse/q-automotive-jobs.aspx',
'https://www.monster.com/jobs/browse/q-banking-jobs.aspx',
'https://www.monster.com/jobs/browse/q-biotech-jobs.aspx',
'https://www.monster.com/jobs/browse/q-business-jobs.aspx',
'https://www.monster.com/jobs/browse/q-charity-jobs.aspx',
'https://www.monster.com/jobs/browse/q-construction-jobs.aspx',
'https://www.monster.com/jobs/browse/q-creative-design-jobs.aspx',
'https://www.monster.com/jobs/browse/q-customer-service-jobs.aspx',
'https://www.monster.com/jobs/browse/q-editorial-jobs.aspx',
'https://www.monster.com/jobs/browse/q-education-jobs.aspx',
'https://www.monster.com/jobs/browse/q-energy-jobs.aspx',
'https://www.monster.com/jobs/browse/q-engineering-jobs.aspx',
'https://www.monster.com/jobs/browse/q-environmental-jobs.aspx',
'https://www.monster.com/jobs/browse/q-executive-jobs.aspx',
'https://www.monster.com/jobs/browse/q-finance-jobs.aspx',
'https://www.monster.com/jobs/browse/q-food-services-jobs.aspx',
'https://www.monster.com/jobs/browse/q-full-time-jobs.aspx',
'https://www.monster.com/jobs/browse/q-government-jobs.aspx',
'https://www.monster.com/jobs/browse/q-healthcare-jobs.aspx',
'https://www.monster.com/jobs/browse/q-hospitality-jobs.aspx',
'https://www.monster.com/jobs/browse/q-human-resources-jobs.aspx',
'https://www.monster.com/jobs/browse/q-human-services-jobs.aspx',
'https://www.monster.com/jobs/browse/q-insurance-jobs.aspx',
'https://www.monster.com/jobs/browse/q-international-jobs.aspx',
'https://www.monster.com/jobs/browse/q-internet-jobs.aspx',
'https://www.monster.com/jobs/browse/q-it-jobs.aspx',
'https://www.monster.com/jobs/browse/q-language-translator-jobs.aspx',
'https://www.monster.com/jobs/browse/q-legal-jobs.aspx',
'https://www.monster.com/jobs/browse/q-logistics-jobs.aspx',
'https://www.monster.com/jobs/browse/q-maintenance-jobs.aspx',
'https://www.monster.com/jobs/browse/q-manufacturing-jobs.aspx',
'https://www.monster.com/jobs/browse/q-marketing-jobs.aspx',
'https://www.monster.com/jobs/browse/q-media-jobs.aspx',
'https://www.monster.com/jobs/browse/q-military-jobs.aspx',
'https://www.monster.com/jobs/browse/q-overseas-jobs.aspx',
'https://www.monster.com/jobs/browse/q-part-time-jobs.aspx',
'https://www.monster.com/jobs/browse/q-personal-services-jobs.aspx',
'https://www.monster.com/jobs/browse/q-production-and-ops-jobs.aspx',
'https://www.monster.com/jobs/browse/q-project-management-jobs.aspx',
'https://www.monster.com/jobs/browse/q-quality-assurance-jobs.aspx',
'https://www.monster.com/jobs/browse/q-r-and-d-jobs.aspx',
'https://www.monster.com/jobs/browse/q-real-estate-jobs.aspx',
'https://www.monster.com/jobs/browse/q-religious-jobs.aspx',
'https://www.monster.com/jobs/browse/q-retail-jobs.aspx',
'https://www.monster.com/jobs/browse/q-sales-jobs.aspx',
'https://www.monster.com/jobs/browse/q-science-jobs.aspx',
'https://www.monster.com/jobs/browse/q-security-jobs.aspx',
'https://www.monster.com/jobs/browse/q-skilled-trades-jobs.aspx',
'https://www.monster.com/jobs/browse/q-sports-jobs.aspx',
'https://www.monster.com/jobs/browse/q-technology-jobs.aspx',
'https://www.monster.com/jobs/browse/q-telecommunications-jobs.aspx',
'https://www.monster.com/jobs/browse/q-transportation-jobs.aspx',
'https://www.monster.com/jobs/browse/q-travel-jobs.aspx',
'https://www.monster.com/jobs/browse/q-web-jobs.aspx',
];
/**
* @param $pages
* @param $output
*/
public function parse($pages, $output)
{
// categories
foreach ($this->url as $category) {
$client = new Client();
try {
$response = $client->get($category);
} catch (ClientException $exception) {
continue;
}
$crawler = new Crawler($response->getBody()->getContents());
$jobTitleSamples = $crawler->filter('ul.card-columns > li > a');
// jobTitleSamples
foreach ($jobTitleSamples as $key => $jobTitleSample) {
if ($key % 2) {
continue;
}
//var_dump($jobTitleSample->getAttribute('href'));
$jobTitleResponse = $client->get($jobTitleSample->getAttribute('href'));
$jobTitleCrawler = new Crawler($jobTitleResponse->getBody()->getContents());
//paginator
$paginator = $jobTitleCrawler->filter('input#totalPages');
if ($paginator->count() > 0) {
$pages = $paginator->eq(0)->attr('value');
for ($page = 0; $page <= $pages; $page++) {
if ($page == 0) {
$urlJobList = $jobTitleSample->getAttribute('href');
}
else {
$urlJobList = $jobTitleSample->getAttribute('href').'?page='.$page;
}
$response = $client->request('GET', $urlJobList);
$pag_crawler = new Crawler($response->getBody()->getContents());
$vacations = $pag_crawler->filter('div.js_result_details-left');
foreach ($vacations as $el) {
if ($el->getElementsByTagName('a')->length >= 3) {
$vacationUrl = $el->getElementsByTagName('a')->item(0)->getAttribute('href');
$name = $el->getElementsByTagName('span')->item(0)->textContent;
$employer = $el->getElementsByTagName('span')->item(1)->textContent;
$location = $el->getElementsByTagName('a')->item(2)->getAttribute('title');
$this->insert($name, $vacationUrl, AbstractProvider::MONSTER_COM_PROVIDER, $location, $employer, null);
}
}
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment