AJUDA PHP _ DUVIDAS PAGINACAO
24/11/2019
0
Boa tarde Pessoal.
Sou iniciante em PHP e estou tentando desenvolver um crawler em PHP para um projeto.
Já consegui pegar as informações que preciso, porém o site que estou 'crawleando' só exibe 20 resultados por página. Dependendo de qual cidade é inserida no campo de busca, podemos ter X páginas para serem exibidas da 1ª a última.
As páginas seguem o mesmo padrão com a númeração no final.
Por exemplo:
https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=1
https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=2
https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=3
.. e assim por diante, dependendo de qual cidade coloque na busca, um número X de páginas pode ser gerados.
Mas não estou tendo nenhuma ideia que funcione de como automatizar isso no crawler para que ele possa ler todas as páginas disponíveis.
Alguem consegue me ajudar?
Segue código PHP
<?php
require "vendor/autoload.php";
use GuzzleHttp\Client;
use Sunra\PhpSimple\HtmlDomParser;
$client = new Client([
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
]
]);
$URL = 'https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=1';
$html = $client->request("GET",$URL)->getBody();
$dom = HtmlDomParser::str_get_html($html);
foreach ($dom->find('meta[itemprop=url]') as $Key => $link){
$urlEmpresa = $link->content;
$html = $client->request("GET",$urlEmpresa)->getBody();
$domEmpresa = HtmlDomParser::str_get_html($html);
$basicsInfo = $domEmpresa->find('div.basicsInfo',0);
$extendedInfo = $domEmpresa->find('div.extendedInfo',0);
$titulo = html_entity_decode($basicsInfo->find('h1',0)->plaintext);
$categoria = html_entity_decode(trim($basicsInfo->find('p.category',0)->plaintext));
$endereco = preg_replace('/\s+/',' ',html_entity_decode(trim($extendedInfo->find('.advAddress',0)->plaintext)));
$telefones = [];
foreach($extendedInfo->find('li.detail') as $li){
$telefones[] = trim($li->plaintext);
}
echo $titulo.PHP_EOL.$categoria.PHP_EOL.$endereco.PHP_EOL;
echo'<pre>';
print_r($telefones);
echo'</pre>';
echo PHP_EOL.PHP_EOL.PHP_EOL;
}
?>
Agradeço a ajuda.
Abraços.
Sou iniciante em PHP e estou tentando desenvolver um crawler em PHP para um projeto.
Já consegui pegar as informações que preciso, porém o site que estou 'crawleando' só exibe 20 resultados por página. Dependendo de qual cidade é inserida no campo de busca, podemos ter X páginas para serem exibidas da 1ª a última.
As páginas seguem o mesmo padrão com a númeração no final.
Por exemplo:
https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=1
https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=2
https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=3
.. e assim por diante, dependendo de qual cidade coloque na busca, um número X de páginas pode ser gerados.
Mas não estou tendo nenhuma ideia que funcione de como automatizar isso no crawler para que ele possa ler todas as páginas disponíveis.
Alguem consegue me ajudar?
Segue código PHP
<?php
require "vendor/autoload.php";
use GuzzleHttp\Client;
use Sunra\PhpSimple\HtmlDomParser;
$client = new Client([
'headers' => [
'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
]
]);
$URL = 'https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=1';
$html = $client->request("GET",$URL)->getBody();
$dom = HtmlDomParser::str_get_html($html);
foreach ($dom->find('meta[itemprop=url]') as $Key => $link){
$urlEmpresa = $link->content;
$html = $client->request("GET",$urlEmpresa)->getBody();
$domEmpresa = HtmlDomParser::str_get_html($html);
$basicsInfo = $domEmpresa->find('div.basicsInfo',0);
$extendedInfo = $domEmpresa->find('div.extendedInfo',0);
$titulo = html_entity_decode($basicsInfo->find('h1',0)->plaintext);
$categoria = html_entity_decode(trim($basicsInfo->find('p.category',0)->plaintext));
$endereco = preg_replace('/\s+/',' ',html_entity_decode(trim($extendedInfo->find('.advAddress',0)->plaintext)));
$telefones = [];
foreach($extendedInfo->find('li.detail') as $li){
$telefones[] = trim($li->plaintext);
}
echo $titulo.PHP_EOL.$categoria.PHP_EOL.$endereco.PHP_EOL;
echo'<pre>';
print_r($telefones);
echo'</pre>';
echo PHP_EOL.PHP_EOL.PHP_EOL;
}
?>
Agradeço a ajuda.
Abraços.
Daniel Machado
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)