Autor Zpráva
josefrr
Profil *
Moderátor Chamurappi: Vytrženo z Potřebuju vytáhnout určitý věci z html kodu...

Zdravím válčím s pattern. potřeboval bych jednorázový help :(
Z
<td class="td_desc"><a class="doc_seznam_a" href="http://www.seznamskol.eu/skola/2182-masarykova-zakladni-skola-klasterec-nad-orlici-okres-usti-nad-orlici/">Masarykova základní škola, Klášterec nad Orlicí, okres Ústí nad Orlicí</a><br>Masarykova základní škola, Klášterec nad Orlicí, okres Ústí nad Orlicí, Státní , Ředitel/ka: Jaroslav Preissler<br><a class="doc_seznam_www" target="_blank" rel="nofollow" href="www.zs.klasterecno.indos.cz</a\" target=\"_blank\" rel=\"nofollow\">http://www.zs.klasterecno.indos.cz">www.zs.klasterecno.indos.cz</a> , Klášterec nad Orlicí 176<span id="city">, Klášterec nad Orlicí</span> <a title="Najít na mapě" target="_blank" href="http://amapy.atlas.cz/?site=centrum#@q=Klášterec nad Orlicí 176, Klášterec nad Orlicí">+</a></td>



bych potřeboval vytahnout url http://www.seznamskol.eu/skola/2182-masarykova-zakladni-skola-klasterec-nad-orlici-okres-usti-nad-orlici

Dostal jsem se až sem :
preg_match_all("/doc_seznam_a.*href.*<\/a>/i", $result, $matches, PREG_SET_ORDER);

ale prostě dál to nesesmolím :'(
YoSarin
Profil
josefrr
Zdravím, příště si prosím založ nové vlákno a neotvírej ta která už dva roky spí u ledu.
preg_match_all('~class="doc_seznam_a"[^>]+href="([^"]+)"~', $result, $matches);

Moderátor Chamurappi: Děkuji za upozornění.
josefrr
Profil *
ok pro priste si to pohlídám :)
<?              
    $curl=curl_init();
    curl_setopt($curl,CURLOPT_RETURNTRANSFER ,1 );
    curl_setopt($curl,CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($curl,CURLOPT_URL,"http://www.seznamskol.eu/obor/zakladni-skola/?kraj=pardubicky&okres=usti-nad-orlici");
    $result = curl_exec($curl);
    
preg_match_all('~class="doc_seznam_a"[^>]+href="([^"]+)"~', $result, $matches);

    echo count($matches); 
foreach ($matches as $val) {
    echo "matched: " . strip_tags($val[0]) . "\n";
    echo "part 1: " . strip_tags($val[1]) . "\n";
    echo "part 2: " . strip_tags($val[2]) . "\n";
    echo "part 3: " . strip_tags($val[3]) . "\n";
    echo "part 4: " . strip_tags($val[4]) . "\n\<br>";
}

?>


jeste jednou, nikde tam nevidim problem :(
YoSarin
Profil
josefrr:
Problém je v tom, že v dokumentu který procházíš je nejdřív uvedený odkaz a až za ním třída :) Takže v tom regulérním výrazu to bude chtít taky prohodit. Případně (raději) vzít v úvahu obě možnosti:
preg_match_all('~(class="doc_seznam_a"[^>]+href="([^"]+)")|(href="([^"]+)"[^>]+class="doc_seznam_a")~', $result, $matches);

Nebo můžeš použít xpath. Ale k tomu je potřeba mít na vstupu xml, takže musíme získaný string trochu upravit:
// nejdřív upravíme získaný výstup na xml
$config = array(
	'indent' => TRUE,
	'output-xhtml' => TRUE,
	'wrap' => 200
);
$tidy = tidy_parse_string($result, $config, 'UTF8');
$tidy->cleanRepair();
$xmlString = preg_replace('/&/', '&amp;', $tidy->Body());
// načteme ho jako xml
$xml = simplexml_load_string($xmlString);
// a pustíme xpath
$out = $xml->xpath('//a[@class="doc_seznam_a"]/@href');

Ale závisí to na tom, jestli máš na hostingu Tidy povolené...

EDIT:
jediná podstatná věc v tom tidy configu je 'output-xhtml', zbytek můžeš s klidným svědomím odstranit.
josefrr
Profil *
Díky, funguje ;)
tedka budu muset nastudovat tvoje techniky ;)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: