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 Korjenioski

Seguindo outros tuto­ri­ais sobre como impor­tar dados, desta vez vamos fazer um script para cap­tu­rar dados de uma pagina HTML e gerar um SQL de insert.  Nesta pes­quisa estou pro­cu­rando por links den­tro de uma deter­mi­nada Tag. Estou usando o ID dos ele­men­tos como refe­rên­cia. Veja a impor­tân­cia de não repe­tir os IDs dos ele­men­tos.  Chega de con­versa 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 comen­tário que terei pra­zer em aju­dar.
Comen­tários são bem vin­dos assim posso mel­ho­rar a qual­i­dade dos tuto­ri­ais aqui apresentados.

É isso pes­soal tenham uma ótima semana e até o pró­ximo post.

Com­par­ti­lhe com seus ami­gos:
  • Print
  • Facebook
  • Google Bookmarks
  • PDF
  • RSS
  • Twitter
  • LinkedIn



View Comments to “Importar dados apartir de uma URL e gerar SQL para inserir dados em BD MySQL ou PostgreSQL”

  1. André Luiz Says:

    Muito bom o tuto­rial, esse código fun­ci­o­na­ria no site do goo­gle­Maps, pois desejo tirar alguns ende­re­ços desse site e enri­que­cer minha base. uti­li­zei file_get_contents() para colo­car o con­teudo string numa vári­a­vel, mas todo o texto tanto como os titu­los estão den­tro de uma vari­a­vel deles ex.“id =“title””, e eu não con­sigo ler.

  2. André Luiz Says:

    mutio bom o tuto­rial, ele fun­ci­ona no goo­gle­maps?
    pois pre­ci­sava tirar alguns dados da busca desse site, só que os dados estão numa vari­a­vel ex(id=“title”) e não con­sigo lê-la, uti­li­zei file_get_contents() para capi­tu­rar o texto, mas não deu certo. Pode me ajudar?

  3. Marcelo Korjenioski Says:

    Me envia a URL para eu ver o que é pos­sí­vel fazer.

Deixe um comentário

blog comments powered by Disqus
Designed by NattyWP Wordpress Themes.
Images by desEXign.