Aug 25
Importar dados apartir de uma URL e gerar SQL para inserir dados em BD MySQL ou PostgreSQL
Expressões Regulares, HTML, MySQL, PHP, SQL, Sites Comentar >> Marcelo KorjenioskiSeguindo outros tutoriais sobre como importar dados, desta vez vamos fazer um script para capturar dados de uma pagina HTML e gerar um SQL de insert. Nesta pesquisa estou procurando por links dentro de uma determinada Tag. Estou usando o ID dos elementos como referência. Veja a importância de não repetir os IDs dos elementos. Chega de conversa e vamos direto ao ponto.
<?php
header("Content-Type: text/html; charset=UTF-8");
// URL que irei pegar os links
$url = "http://pt.wikipedia.org/wiki/Categoria:Especialidades_m%C3%A9dicas";
$conteudo = null;
// Abro conexão de leitura.
$conecurl = @fopen("$url","r") or die ('<center>erro na conexão<br><b>informe o administrador erro 15 </b></center>');
while(!feof($conecurl)) {
$conteudo .= fgets($conecurl,4096);
}
// Fecho conexão.
fclose($conecurl);
// Aqui vou informar a primeira tag para o filtro do HTML eu peguei um elemento com id por ser unico no HTML.
$inicio = strpos($conteudo,'<div id="mw-subcategories">');
// Pego outro elemento com id para finalizar o range de busca.
$fim = strpos($conteudo,'<div id="mw-pages">');
// Pegamos a posição final menos a inicial para ver quanto iremos pular.
$quantopula = $fim - $inicio ;
$conteudo = substr($conteudo, $inicio ,$quantopula);
function pegaLink($html){
// ER para pegar todas as tags de links.
$er = "/<a.*?href=(\".*?\"|[A-Za-z0-9_]*?).*?>.*?<\/a>/";
preg_match_all($er,$html,$links);
$link = $links[0];
return $link;
}
function pegaNomeLink($url){
// ER para pegar o nome da tag de link.
$label = str_replace("</a>","",preg_replace("/^<a.*?>/","",$url));
return $label;
}
// Pego um array com todos os links
$links = pegaLink($conteudo);
$query = NULL;
// Inicio da query.
$query .= "insert into especialidades (nome) values ";
// Faço um loop para fazer o insert de cada item.
foreach ($links as $value) {
$item = '(';
// Removo o link e pego apenas o nome.
$item .= "'".pegaNomeLink($value)."'";
$item .= ')';
$values[] = $item;
}
// Transformo o Array em uma String.
$query .= implode(',', $values);
echo $query;
?>
Caso tenha alguma duvida deixe um comentário que terei prazer em ajudar.
Comentários são bem vindos assim posso melhorar a qualidade dos tutoriais aqui apresentados.
É isso pessoal tenham uma ótima semana e até o próximo post.

Muito bom o tutorial, esse código funcionaria no site do googleMaps, pois desejo tirar alguns endereços desse site e enriquecer minha base. utilizei file_get_contents() para colocar o conteudo string numa váriavel, mas todo o texto tanto como os titulos estão dentro de uma variavel deles ex.“id =“title””, e eu não consigo ler.
mutio bom o tutorial, ele funciona no googlemaps?
pois precisava tirar alguns dados da busca desse site, só que os dados estão numa variavel ex(id=“title”) e não consigo lê-la, utilizei file_get_contents() para capiturar o texto, mas não deu certo. Pode me ajudar?
Me envia a URL para eu ver o que é possível fazer.