| 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: 15 let
|
|||
0