Archief - Algoritme (php): uithalen van urls

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

JohnBeton

Legacy Member
Ik heb een functie nodig die uit een HTML bestand alle links (<a href="xxx"></a> -> xxx) haalt en deze in een variabele steekt...

Ik heb al met preg_match_all vanalles geprobeerd, maar de output is nog niet wat ik wil...

PHP:
$result=preg_match_all('#(<a(.*)href="(.*)"(.*)>(.*)</a>)#Ui', $test,$matches);
echo sizeof($matches[0])." links found.";
$matches_first=$matches;
$temp="";
$i=$j=0;
while($j<=sizeof($matches[0]))
{
	$temp.=$matches[0][$j]."\n";
	$j++;
}
=> geeft niet altijd correcte links terug...

JohnBeton

Legacy Member
...

Ligt het aan de threadtitel ofzo, dat niemand mijn thread wil lezen ("de zóveelste phpBB[url ]-tag howto"), of is het echt zo moeilijk?

BertG

Legacy Member
dit is geen url howto, dit is eerder een preg-match probleem...
toon es wat foute output en wat juiste, dan kunnen we je maby helpen :)

JohnBeton

Legacy Member
Blijkbaar heb ik nog iets veranderd, of is de inhoud op de site veranderd, maar nu ziet de output er toch al anders uit...

(tomshardware.com)
Code:
330 links found.<A HREF="http://www.shopzilla.com/7R--Computers_Software_-_cat_id--4" TITLE="Search Prices" TARGET="_top">Search Prices</A><br>
<A HREF="http://www.tomshardware.com/index.html" TITLE="Tom's Hardware Guide Homepage" TARGET="_top">THG Home</A><br>
<A HREF="http://www.tomshardware.com/hardnews/index.html" TITLE="Hard News" TARGET="_top">News</A><br>
<A HREF="http://www.tomshardware.com/motherboard/index.html" TITLE="Motherboards &amp; RAM" TARGET="_top">Motherboards</A><br>
<A HREF="http://www.tomshardware.com/cpu/index.html" TITLE="Processors" TARGET="_top">CPU</A><br>
<A HREF="http://graphics.tomshardware.com/index.html" TITLE="Graphics &amp; Displays" TARGET="_top">Graphics &amp; Displays</A><br>
<A HREF="http://www.tomshardware.com/storage/index.html" TITLE="Mass Storage" TARGET="_top">Storage</A><br>
<A HREF="http://www.tomsnetworking.com/" TITLE="Tom's Networking" TARGET="_top">Networking</A><br>
<A HREF="http://www.tomshardware.com/mobile/index.html" TITLE="Mobile Devices" TARGET="_top">Mobile</A><br>
<A HREF="http://www.tomshardware.com/consumer/index.html" TITLE="Peripherals &amp; Consumer Electronics" TARGET="_top">Peripherals &amp; Consumer</A><br>
<A HREF="/storage/20041102/index.html" TITLE="November 2, 2004 - 10 DVD Burners: 16x and Dual-Layer - or Nothing! 


   Nearly all manufacturers have come out this year with a DVD burner rated at 16x writing speed, and we tested 10 of them. We found that performance differs between devices, but only slightly; the exception is dual-layer writing, where speeds still vary a great deal. The real distinction is in how the burners recognize 16x media; the results here are rather astonishing!" TARGET="_top"><B>10 DVD Burners: </B> 16x and Dual-Layer - or Nothing!</A><br>
<A HREF="/storage/index.html" TITLE="More Releases in Mass Storage" TARGET="_top"><B>More Releases</B> in Mass Storage</A><br>
<A HREF="http://www.tomsnetworking.com/Reviews-170-ProdID-WLIU2KG54AI.php" TITLE="October 19, 2004 - QuickView: BuffaloTech 54 Mbps Wireless USB 2.0 Keychain Adapter 


   Now that the novelty of &quot;flash key&quot; sized wireless adapters has worn off, manufacturers are faced with coming up with other ways to make their products stand out. Buffalo Technology's WLI-U2-KG54-AI has a unique approach that may be attractive to the less-organized among us." TARGET="_top"><B>QuickView: </B> BuffaloTech 54 Mbps Wireless USB 2.0 Keychain Adapter</A>

<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D405%26keyword%3Dradeon%26rf%3Dtom024" style="color: #039;">radeon</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D405%26keyword%3Dall+in+wonder%26rf%3Dtom024" style="color: #039;">all in wonder</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D405%26keyword%3Dnvidia%26rf%3Dtom024" style="color: #039;">nvidia</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D405%26keyword%3Dgeforce+fx%26rf%3Dtom024" style="color: #039;">geforce fx</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/browse.xpml%3Fcat_id%3D402%26rf%3Dtom024" style="color: #039;">digital cameras</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D402%26keyword%3Dcanon%26rf%3Dtom024" style="color: #039;">canon</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D402%26keyword%3Dfuji%26rf%3Dtom024" style="color: #039;">fuji</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D402%26keyword%3Dsony%26rf%3Dtom024" style="color: #039;">sony</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D402%26keyword%3Dolympus%26rf%3Dtom024" style="color: #039;">olympus</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D402%26keyword%3Dnikon%26rf%3Dtom024" style="color: #039;">nikon</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D402%26keyword%3Dminolta%26rf%3Dtom024" style="color: #039;">minolta</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/browse.xpml%3Fcat_id%3D416%26rf%3Dtom024" style="color: #039;">monitors</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dflat+panel%26rf%3Dtom024" style="color: #039;">flat panel</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dviewsonic%26rf%3Dtom024" style="color: #039;">viewsonic</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dnec%26rf%3Dtom024" style="color: #039;">nec</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dsamsung%26rf%3Dtom024" style="color: #039;">samsung</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dphilips%26rf%3Dtom024" style="color: #039;">philips</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dbenq%26rf%3Dtom024" style="color: #039;">benq</a><br>
<a href="http://www.ad.tomshardware.com/cgi-bin/bc.m?count=1770&time=QaN@S9hcg4EAASLUR1M&link=http://tomshardware.bizrate.com/buy/products.xpml%3Fcat_id%3D416%26keyword%3Dcompaq%26rf%3Dtom024" style="color: #039;">compaq</a><br>
<A HREF="/motherboard/20041108/index.html" TITLE="The Athlon64 Radeon Xpress: ATi's Latest Stab as a Chipset Maker"><B>The Athlon64 Radeon Xpress: ATi's Latest Stab as a Chipset Maker</B></A><br>
<A HREF="/cpu/20041103/index.html" TITLE="5 Cool P4 Coolers Protect Your P4 From Heatstroke"><B>5 Cool P4 Coolers Protect Your P4 From Heatstroke</B></A><br>
<A HREF="/graphic/20041004/index.html" TITLE=" VGA Charts IV  AGP Video Cards"><B> VGA Charts IV  AGP Video Cards</B></A><br>
<A HREF="/display/20041015/index.html" TITLE="BenQ's FP71e+ LCD Is Fast, But How Furious?"><B>BenQ's FP71e+ LCD Is Fast, But How Furious?</B></A><br>
<A HREF="/video/20041028/index.html" TITLE="Chroma Keying for the Masses: Serious Magic Ultra"><B>Chroma Keying for the Masses: Serious Magic Ultra</B></A><br>
<A HREF="/storage/20041102/index.html" TITLE="10 DVD Burners: 16x and Dual-Layer - or Nothing!"><B>10 DVD Burners: 16x and Dual-Layer - or Nothing!</B></A><br>
<A HREF="/network/20030630/index.html" TITLE="Building A Home Network From Scratch"><B>Building A Home Network From Scratch</B></A><br>
<A HREF="/mobile/20041108/index.html" TITLE="GeForce Go 6800 Reaches For Desktop Graphics Performance"><B>GeForce Go 6800 Reaches For Desktop Graphics Performance</B></A><br>
<A HREF="/consumer/20041115/index.html" TITLE="It's Here! The Holiday Buyer's Guide 2004"><B>It's Here! The Holiday Buyer's Guide 2004</B></A><br>
<A HREF="/business/20041112/index.html" TITLE="Is Flash Heading for Retirement?"><B>Is Flash Heading for Retirement?</B></A><br>
<A HREF="/howto/20041113/index.html" TITLE="Supersize Your TV for $300: Build Your Own XGA Projector!"><B>Supersize Your TV for $300: Build Your Own XGA Projector!</B></A><br>
<A HREF="/site/submission/feedback.html" TITLE="Feedback Form"><B>Feedback Form</B></A><br>
<A HREF="/newsletter/user/subscribe.html" TITLE="Subscribe to Tom's Hard Newsletter" TARGET="_top"><B>Tom's Hard Newsletter</B></A><br>
<a href="#" onclick="callSurvey('http://survey.sotech.com/165031/start.asp?s=13');hide('SurveyInvite');"><img src="http://www.sotech.com/popon/165031/images/YES.gif" width="145" height="18" alt="" border="0"></a><br>
<a href="#" onclick="hide('SurveyInvite');"><img src="http://www.sotech.com/popon/165031/images/NO.gif" width="145" height="18" alt="" border="0"></a><br>
<br>
De "<br>" voeg ik zelf toe, zodat de output leesbaarder is (net als de \r\n, zodat source leesbaarder is). (is maar een deel, forum laat niet meer toe)

Nu moet ik enkel nog hetgeen tussen de "" van de href staat filteren, en ik heb wat ik wil denk ik...

Wel heb ik nog een probleempje gezien als ik bvb google.be doorzoek:
Code:
6 links found.<a id=1a class=q href="/imghp?hl=nl&tab=wi&ie=UTF-8">Afbeeldingen</a><br>
<a id=2a class=q href="/grphp?hl=nl&tab=wg&ie=UTF-8">Discussiegroepen</a><br>
<a id=3a class=q href="/dirhp?hl=nl&tab=wd&ie=UTF-8">Gids</a><br>
<a href=/advanced_search?hl=nl>Geavanceerd zoeken</a><br>&nbsp;&nbsp;<a href=/preferences?hl=nl>Voorkeuren</a><br>&nbsp;&nbsp;<a href=/language_tools?hl=nl>Taalhulpmiddelen</a></font></td></tr><tr><td colspan=3 align=center><font size=-1>Zoek: <input id=all type=radio name=meta value="" checked><label for=all> het Internet</label><input id=lgr type=radio name=meta value="lr=lang_nl" ><label for=lgr> pagina's in het Nederlands</label><input id=cty type=radio name=meta value="cr=countryBE" ><label for=cty>pagina's uit  België</label></font></td></tr></table></form><p><font size=-1><p> </font><br>Google.be aangeboden in: <a href="http://www.google.be/fr">Français</a><br>
<a href="http://www.google.be/de">Deutsch</a><br>
<a href="http://www.google.be/en">English</a><br>
<br>
Sommige links staan op dezelfde lijn (en zijn niet zichtbaar als je de html-output van het script bekijkt), dus daar scheelt nog iets...

+ Er mankeren wel enkele links.. (alles vanaf "advertentie programma's" blijkbaar, zie www.google.be)

JohnBeton

Legacy Member
Ok, als bovenstaande regex goed is (??), wordt met de geresulteerde data het volgende gedaan om enkel de href-links te hebben:

PHP:
$result=preg_match_all('#(href="(.*)(\.html)")#Ui', $temp,$matches);
//|(href="(.*)\.htm")|(href="(.*)\.html")|(href="(.*)\.htm")(.*)
echo sizeof($matches[0])." real links found.";
//print_r($matches);
$tosave="";
$i=$j=0;
while($j<=sizeof($matches[0]))
{
	$tosave.=$matches[0][$j]." \r\n";
	$j++;
}
Dit geeft dan inderdaad een mooie output van enkel 'href=" " ' die eindigen op .html.

Maar hoe zorg ik er nu voor dat ook links die eindigen op .php,.asp,.htm,... mee worden opgenomen in de resultaten? (heb al zitten proberen met "|", maar dat lukt niet echt...

Alvast bedankt!

JohnBeton

Legacy Member
killgore zei:
je url die je uithaalt zit in index 1 of 2 :), niet in nul
Hoezo?

Als je het over $matches[0] hebt => [1] en [2] bevatten dezelfde data... (zo lijkt het toch)

JohnBeton

Legacy Member
Pleeeaaaase?


Als iemand de regexp voor het volgende kan geven, kan ik er zelf wel het nodige uithalen voor mijn probleem:
"woord moet eindigen op a OF op b".

servi

Legacy Member
als je nu eens uitvoer laat zien van wat je wil en wat de uitvoer is die je krijgt dan is het probleem duidelijker. ( zonder 10-tallen urls erbij te zetten die er niet toe doen )


2de vraag : /([a-z]*)(a|b)([ \r\n\t]+)/Ui

JohnBeton

Legacy Member
servi zei:
als je nu eens uitvoer laat zien van wat je wil en wat de uitvoer is die je krijgt dan is het probleem duidelijker. ( zonder 10-tallen urls erbij te zetten die er niet toe doen )
Hetgeen in (code) tags staat is de output ;)

Maar het grootste probleem is opgelost, ik krijg alle href's uit een html-pagina gefilterd, ik moest nu gewoon nog ervoor zorgen dat tegelijkertijd (of erna) enkel links die eindigen op .html,.php.htm.asp e.d. ge-output werden.

Alvast bedankt, ik zal uw vb straks extrapoleren ;)

JohnBeton

Legacy Member
Nog 1 klein probleempje:

stel dat ergens een (relatieve) link staat in de aard van hetvolgende:
<a href="stats">Statistiekjes</a>


Die verwijst dus naar een hogerliggende directory die "stats" heet, en wellicht een index-pagina bevat die automatisch wordt weergegeven.

Hoe kan ik zoiets het makkelijkste laten herkennen?

Maw: welke reg.expressie kan ik gebruiken om hetvolgende op te nemen:
"a/b/c"



De andere links worden herkend aan hun .php/.html/.htm/.asp - extensies..
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan