Autor | Zpráva | ||
---|---|---|---|
eurolike Profil |
#1 · Zasláno: 14. 6. 2006, 12:02:38
Nazdaar,
mám problém s phpčkem. Potřebuju vyparsovat data z html stránky - konkrétně adresy na články ze zpravodajství mvcr.cz Otevřu si tedy soubor a kod načtu do velkýho řetězce : $nactiweb = join ('', file ('http://www.mvcr.cz/rs_atlantic/project/section.php?ids=314')); Jednotlivé adresy článků jsou v divech, ktere maji class s nazvem policie - začnu tedy procházet stránku: $parser = strstr($nactiweb, '<div class="policie">'); Vzhledem k tomu, že adresa nezačíná ihned za divem, ale je tam taky pár dalších html znaků - jednoduše ten text ořežu: $parser = substr($parser, 43, 20); // timto ziskam adresu ve tvaru article.php?id=15205 - tedy přesně tak, jak potřebuju Problém tkví ale v tom, že těch adres je na stránce 15 - můžete mi prodadit nějaký cyklus, který by postupně prošel celou stránku a vypsal podobnym způsobem jako v předchozí ukázce všechny adresy na články ? Předem díky za odpověď. |
||
djlj Profil |
#2 · Zasláno: 14. 6. 2006, 12:06:41 · Upravil/a: djlj
|
||
eurolike Profil |
#3 · Zasláno: 14. 6. 2006, 12:47:45
můžeš prosím uvést konkrétní příklad, jak by to šlo udělat ? funkci preg_match_all používám bohužel prvně :(
|
||
eurolike Profil |
#4 · Zasláno: 14. 6. 2006, 13:10:09
Na jednom něměckym foru jsem našel tuhle aplikaci, která by měla projít web a najít tam všechny odkazy:
<?php // <a href="http://www.php-resource.de/forum/showthread.php?s=&threadid=6952 4" target="_blank">http://www.php-resource.de/forum/sh...&threadid=69524< /a> echo "<html> <head> <title>Linkfinder</title> </head> <body>"; if (isset($HTTP_POST_VARS['link'])) { $html = file_get_contents($HTTP_POST_VARS['link']); preg_match_all("/<a.*</a>/iU", $html, $matches); shuffle($matches[0]); preg_match("/<a.*?href=(\"|'|)([^(\"|'|>| )]*)(\"|'|| )[^>]*>([^<]*)</a>/is", $matches[0][0], $matches1); echo "Zufälliger Link:<br> ".$matches1[2]."<br> <br>"; } echo "<form action='".$PHP_SELF."' method='post'> <h2>Linkfinder mit Zufallsprinzip</h2> <br> <input type='text' name='link' value='".$HTTP_POST_VARS['link']."'><br> <br> <input type='submit' name='sumbit' value='Durchsuchen'> </form> </body> </html>"; ?> ale bohužel to nefunguje :( hlásí to: Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 'a' in C:\Documents and Settings\Jirka\Dokumenty\webprojekty\pokus\help.php on line 15 Warning: shuffle() expects parameter 1 to be array, null given in C:\Documents and Settings\Jirka\Dokumenty\webprojekty\pokus\help.php on line 16 Warning: preg_match() [function.preg-match]: Unknown modifier 'a' in C:\Documents and Settings\Jirka\Dokumenty\webprojekty\pokus\help.php on line 17 |
||
tiso Profil |
#5 · Zasláno: 14. 6. 2006, 13:14:24
...a máš ich koľko len chceš... |
||
hw3 Profil |
#6 · Zasláno: 14. 6. 2006, 13:32:28
|
||
anonym Profil * |
#7 · Zasláno: 14. 6. 2006, 14:56:37
jak jak se to mohlo stát proč to prasklo proč!!!! ten bude platit jak mourovatej mam zkaženej život je mi 18 a sem držka světa
|
||
tiso Profil |
#8 · Zasláno: 14. 6. 2006, 15:05:13
anonym
Spamuj si na svojom kompe a nie v tejto diskusii... Daj si odchod... |
||
djlj Profil |
#9 · Zasláno: 14. 6. 2006, 16:21:00
Unknown modifier 'a'
No ten regulární výraz je napsanej špatně, místo </a> tam má být <\/a> (u obou dvou). |
||
anode Profil |
#10 · Zasláno: 14. 6. 2006, 17:18:03
<?php
$contents = file_get_contents('http://www.mvcr.cz/rs_atlantic/project/section.php? ids=314'); $re = '~<div class="policie">.*href="([^"]+)"~Us'; $matches = array(); preg_match_all($re,$contents,$matches); print_r($matches[1]); ?> |
||
eurolike Profil |
#11 · Zasláno: 15. 6. 2006, 15:56:57
anode: woow :) díkys moc - jsi borec :)
|
||
eurolike Profil |
#12 · Zasláno: 15. 6. 2006, 17:01:28
a ještě jedna věc - teda pokud můžu vopruzovat :)
nechá se podobnym způsobem vyparsovat i obsah článku z http://www.mvcr.cz/rs_atlantic/project/article.php?id=15327 jde mi o to, aby tam byl nadpis, krátkej úvod, kterej je tučně a samotnej text. Kdo mi poradí, dostane bonbon :) |
||
eurolike Profil |
#13 · Zasláno: 15. 6. 2006, 17:42:09
jinak samozřejmě díkes všem za rady
|
||
anode Profil |
#14 · Zasláno: 15. 6. 2006, 19:20:30
No tak to už je jednoduchý ne? Prostě chytneš text mezi <h3 style="font-size:125%"> a </h3> - to máš nadpis - pak text mezi <b><i> a </i></b>, to je úvod, no a nakonec od <br> do </div> je obsah článku. Jednoduché použití preg_match().
|
||
eurolike Profil |
#15 · Zasláno: 15. 6. 2006, 21:27:58
jasňačka - problém je s tim sestavenim regulárního výrazu. Tohle je pro mě fakticky španělská vesnice - ale musim říct, že fce preg_match() je dotažená do dokonalosti. Se svym způsobem parsování bych potřeboval desítky řádků kodu - takhle je to v pěti řádcích.
|
||
eurolike Profil |
#16 · Zasláno: 16. 6. 2006, 12:35:19
já teda nevim, jestli jsem to dobře pochopil - ale můžu teda třeba pro parsování nadpisu použít toto ?
$contents = file_get_contents('http://www.mvcr.cz/rs_atlantic/project/article.php? id=15660'); $re = '/(<h3[^>]*>.*?<\/h3>)/mi'; $matches = array(); preg_match_all($re,$contents,$matches); print_r($matches[1][3]); |
||
anode Profil |
#17 · Zasláno: 16. 6. 2006, 13:50:30
eurolike: jo, dá se to takto, jenom nemusíš používat v tomto případě zbytečný preg_match_all(), ale vystačíš si s jednoduchým preg_match() :
$re = '/<h3[^>]*>.*?<\/h3>/si'; $matches = array(); preg_match($re, $contents, $matches); echo $matches[0]; musíš použít modifikátor "s", aby tečka odpovídala i případnému přechodu na další řádek, naopak modifikátor "m" je zde zbytečný. Uzávorkování v regulárním výrazu můžeš s výhodou použít pro vybrání konkrétní části porovnávaného řetězce, např. při použití výrazu: $re = '/<h3[^>]*>(.*?)<\/h3>/si'; budeš mít v $matches[1] přímo čistý text nadpisu |
||
eurolike Profil |
#18 · Zasláno: 16. 6. 2006, 16:05:47
parádička :) mě se teď třeba osvědčilo toto:
$nadpis = '/<h3 style="font-size:125%">(.*)<\/h3>/i'; Zatim to fungovalo v pohodě :) |
||
eurolike Profil |
#19 · Zasláno: 17. 6. 2006, 10:51:09
heh :) a třeba toto bymě zajímalo - když si udělám parsování počasí z centrumu.cz - někde se mi po cestě ztratí diakritika
<?php $contents = file_get_contents('http://pocasi.aktualne.centrum.cz/'); $re = '/<tr class="home-text">(.*?)<\/tr>/si'; $matches = array(); preg_match($re, $contents, $matches); $dily = explode("<br><br>", $matches[0]); $zitra = ltrim(rtrim(strip_tags($dily[0]))); $dalsi = ltrim(rtrim(strip_tags($dily[1]))); echo $zitra . "<BR /><BR />" . $dalsi; ?> jak je to možný :) ? |
||
eurolike Profil |
#20 · Zasláno: 17. 6. 2006, 11:36:25
ha ... takže je to zřejmě jinym kodováním :) na stránkách mvcr, ze který jsem tahal ty články je kodování nastavený na windows-1250 (tam je to v poho s diakritikou), na centrumu používaj iso8859-2 a tam to už nefachčí. podivné ....
|
||
Časová prodleva: 18 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0