Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP] Web scraping

Pagina: 1
Acties:
  • 360 views

  • Famous Copra
  • Registratie: April 2010
  • Laatst online: 19:55
Hallo iedereen,

Ik probeer automatisch de top 40 lijsten op te halen van SLAM!FM, Radio 538 en Q-music. Dit zou moeten kunnen met
code:
1
2
3
4
5
6
7
<?php
$data = file_get_contents('http://search.msn.com/results.aspx?q=site%3Afroogle.com');
$regex = '/Page 1 of (.+?) results/';
preg_match($regex,$data,$match);
var_dump($match);
echo $match[1];
?>

Bron: http://www.oooff.com/php-...sic-php-data-parsing.php#

De code waar het om gaat is (bij SLAM!FM)
code:
1
2
3
4
5
6
7
8
9
<dl class="odd">
<dt class="rating">1</dt>
<dd class="rating">1</dd>
<dd class="rating">10</dd>
<dd class="titel">Ik Neem Je Mee</dd>
<dd class="artiest">Gers</dd>
<dd class="luisteren"></dd>
<dd class="downloaden"></dd>
</dl>

En daar wil ik de eerste rating, de titel en de artiest uit halen. Maar nu weet ik niet hoe ik meerdere stukjes data tegelijk op kan halen en die dan aan elkaar kan laten koppelen etc.
Dus ik hoop dat jullie een goede link of uitleg voor me hebben. Het hoeft niet persé met deze manier van werken te maken te hebben, het mag ook compleet iets anders zijn.

Alvast bedankt,
Ruben

  • Firesphere
  • Registratie: September 2010
  • Laatst online: 24-11 23:34

Firesphere

Yoshis before Hoshis

omdat je meerdere "rating" hier hebt... zou ik zeggen, explode(), dan ff een regex op de brackets.
Uit de explode weet je dat je 3 blokken over houdt, rating[0] t/m rating [2].

Rating 2 is makkelijk te splitsen, rating 0 is de eerste, rating 1 de tweede, en in 2 zit automatisch de derde.

Dus, een korte foreach met een regex zou je alles moeten kunnen geven.

Prop je data vervolgens netjes in een nieuwe assoc-array, en je kan er mee doen wat je wilt.

Je moet hiervoor dus inderdaad even een ietwat afwijkende functie schrijven, maar dat is toch ook weer niet het moeilijkste.

Wat je ook kan doen, is het hele zootje binnen halen en exploden op <dd
Dan hou je een array over met voor elk item een nummertje. Kan je zelfs een str_replace op loslaten om de rest weg te flikkeren. Die tags zijn toch niet variabel.

(Of bedoel je heel iets anders?)

[ Voor 40% gewijzigd door Firesphere op 04-11-2011 19:09 ]

I'm not a complete idiot. Some parts are missing.
.Gertjan.: Ik ben een zelfstandige alcoholist, dus ik bepaal zelf wel wanneer ik aan het bier ga!


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:53

Creepy

Tactical Espionage Splatterer

Aangezien geen van de sites volgens hun voorwaarden toestaan deze content zomaar te hergebruiken ga ik dit topic sluiten. Los daarvan geef je wel voorbeeldcode maar dat heeft nog niks met je daadwerkelijke probleem te maken dus het komt stiekum een beetje over als een scriptrequest. Ga gewoon zelf eens wat proberen. Als je wat kennis van PHP hebt en je kan strings splitten, exploden of wat met regexp doen moet je een eind kunnen komen. Of doe eens gek en gebruik een DOM (XML)parser ;)

[ Voor 26% gewijzigd door Creepy op 04-11-2011 20:11 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Dit topic is gesloten.