@VitorMattosRJ
Realizador de sonhos desde 2003
Amante de opensource
Palestrante
PHP Zend Certified Engineer ( ZEND024235 )
PHPRio ( https://telegram.me/phprio )
CTO Lyseon Tech
Redes sociais: ( VitorMattos ou VitorMattosRJ )
A Lyseon Tech é uma cooperativa de trabalho com modelo de gestão democrática, segura e eficiente composta por profissionais de T.I. altamente qualificados e experientes no mercado. Prezamos por apresentar vantagens, tanto para o cooperado como para as empresas parceiras.
Web scraping (web harvesting or web data extraction) is a computer software technique of extracting information from websites. Usually, such software programs simulate human exploration of the World Wide Web by either implementing low-level Hypertext Transfer Protocol (HTTP), or embedding a fully-fledged web browser, such as Internet Explorer or Mozilla Firefox. - Wikipedia
Extrair dados de sites que não possuem API.
API
Extrair dados de sites que possuem API com rate-limit.
Coletar dados que podemos ver na internet.
Noções básicas de HTML
Noções básicas de HTTP
Conhecer bem como é o fluxo para coletar os dados da fonte desejada
Web Scraping não possui rate limited
Podemos fazer acesso anônimo para coleta de dados
Alguns dados não estão acessíveis via API
API
Alta performance
2019-12-06
Fazer scraping utilizando uma linguagem gostosa de se programar.
Se tiver API, use API
API
Nunca faça um DoS
Se houver, leia o ToS do site
Nunca distribua dados não autorizados
Web Scraping segue este fluxo:
O que o computador vê?
O que eu vejo?
Developer tools
F12
Developer tools
F12
Manualmente usando fopen, file_get_contents e outros
Utilizando cURL
Utilizando Guzzle
Utilizando pacotes especialistas em coleta de dados
Sites estáticos e sem JS
composer require symfony/browser-kit
Sites estáticos e sem JS
$client = new Client();
$crawler = $client->request('GET', '/');
Fazendo uma requisição
Sites estáticos e sem JS
$crawler = $client->request('GET', '/product/123');
$link = $crawler->selectLink('Go elsewhere...')->link();
$client->click($link);
Clicando em um link
Sites estáticos e sem JS
$client = new Client();
$client->request('GET', '/');
// select and click on a link
$link = $crawler->selectLink('Documentation')->link();
$client->click($link);
// go back to home page
$crawler = $client->back();
// go forward to documentation page
$crawler = $client->forward();
Navegando no histórico
Sites dinâmicos com JS
composer require behat/mink-selenium2-driver
Sites dinâmicos com JS
$browser = 'firefox';
$url = 'http://example.com';
$mink = new Mink(array(
'selenium2' => new Session(
new Selenium2Driver($browser, null, $url)
),
));
$mink->getSession('selenium2')
->getPage()
->findLink('Chat')
->click();
Funções de maipulação de string no PHP
Expressões regulares
Classes de DOM do PHP
Pacotes Composer para implementar seletores CSS e xpath
Pacotes que implementam uso de linguagem ubíqua
Seletores CSS e xpath
composer require symfony/css-selector
composer require symfony/dom-crawler
Seletores CSS e xpath
$converter = new CssSelectorConverter();
var_dump($converter->toXPath('div.item > h4 > a'));
Seletores CSS e xpath
$message = $crawler->filterXPath('//body/p')->text();
$crawler = $crawler
->filter('body > p')
->reduce(function (Crawler $node, $i) {
// filters every other node
return ($i % 2) == 0;
});
composer require symfony/http-client
$client = HttpClient::create();
$response = $client->request(
'GET',
'https://api.github.com/repos/symfony/symfony-docs'
);
$statusCode = $response->getStatusCode();
// $statusCode = 200
$contentType = $response->getHeaders()['content-type'][0];
// $contentType = 'application/json'
$content = $response->getContent();
// $content = '{"id":521583, "name":"symfony-docs", ...}'
$content = $response->toArray();
Texto
file_put_contents('dados.txt', $dados);
Banco
vitor@LT.coop.br
t.me/VitorMattos