Created
May 23, 2017 17:12
-
-
Save andreybolonin/6102e03c40f9620a23fe3e45fc6dfed3 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| <?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