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 * |
#3 · Zasláno: 21. 3. 2011, 18:24:05
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 |
#4 · Zasláno: 21. 3. 2011, 22:52:00 · Upravil/a: YoSarin
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('/&/', '&', $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 * |
#5 · Zasláno: 22. 3. 2011, 09:44:59
Díky, funguje ;)
tedka budu muset nastudovat tvoje techniky ;) |
||
Časová prodleva: 13 let
|
0