DomXPath href uit node halen obv van een andere node

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Tim DK

Tim DK

17/03/2018 14:05:24
Quote Anchor link
Ik wil de "url" mbv xpath uit de source trekken alleen als de "distance" == 0 (url2 in dit geval):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<li class="media">
    <div class="lm_holder">
        <a href="/----------------url1--------------"><i class="f_location"></i></a>
    </div>
    <div class="rm_holder fn_holder">
        <div class="f_num" title="bala"></div>  
    </div>
    <div class="rm_holder distance">5<br /> km</div>
    <div class="m_body">
        <h4 class="m_head"><a href="/link-2">klm</a></h4>
            <p class="description">desc2</p>
    </div>
</li>

<li class="media">
    <div class="lm_holder">
        <a href="/--------------url2-----------------"><i class="f_location"></i></a>
    </div>
    <div class="rm_holder fn_holder">
        <div class="f_num" title="bala"></div>  
    </div>
    <div class="rm_holder distance">0<br /> km</div>
    <div class="m_body">
        <h4 class="m_head"><a href="/link-2">klm</a></h4>
            <p class="description">desc2</p>
    </div>
</li>



hiervoor gebruik ik:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$dom
= new DomDocument;
/* Load the HTML */
$dom->loadHTMLFile($file);
/* Create a new XPath object */
$xpath = new DomXPath($dom);
/* Query all <divs> with the class name */
// $nodes = $xpath->query("//div[@class='media']//div[@class='media-body']");

$nodes = $xpath->query("//li[@class='media']");
// $nodes = $xpath->query("//li[@class='media']//div[@class='media-body']");
/* Set HTTP response header to plain text for debugging output */
// header("Content-type: text/plain");
/* Traverse the DOMNodeList object to output each DomNode's nodeValue */

foreach ($nodes as $i => $node) {
    echo "Node($i): ", $node->nodeValue, "\n";
}

?>

Hoe bouw ik de if distance ==0 statement hierin?

Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 17/03/2018 14:10:07 door - Ariën -
 
PHP hulp

PHP hulp

07/05/2024 07:28:20
 
Thomas van den Heuvel

Thomas van den Heuvel

17/03/2018 15:02:56
Quote Anchor link
Deze kun je toch na afloop wel filteren? Sla dus eerst alle hyeperlinks op met daarbij de distances en pak daarna alle hyperlinks met distance 0? Dit lijken mij twee afzonderlijke problemen.

En als ik jou was zou ik eens kijken of er ook een webservice is voor het opvragen van whatever je nu probeert te doen want wat je nu doet (wat in feite webscraping is) is nogal bewerkelijk, foutgevoelig en werkt in de meeste gevallen niet meer als wanneer de HTML-structuur verandert.
 
Tim DK

Tim DK

17/03/2018 15:11:32
Quote Anchor link
Als ik ze beide in een array kan krijgen dan is het zo opgelost maar het probleem is dat (naar mijn weten) ze af zonderlijk worden uitgelezen. Dus eerst alle distances en daarna de urls (of welke volgorde je ook aanhoudt)
 
Thomas van den Heuvel

Thomas van den Heuvel

17/03/2018 15:23:49
Quote Anchor link
Als alle URLs een distance hebben en alles ook in dezelfde volgorde wordt uitgelezen maakt dat niet uit.

Maar dit is een omslachtige manier om data ergens uit te trekken omdat deze in plakken HTML geen betekenis heeft.

Om welke site gaat het, en heeft deze geen API of webservice?

Scrapen zou echt een laatste toevlucht moeten zijn, vaak zijn er betere / handigere oplossingen.
 
Tim DK

Tim DK

17/03/2018 15:27:09
Quote Anchor link
bijna....

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
foreach($html->find('li[class=media]') as $element){

//totaal aantal records
$total=count($html->find('div[class=distance_holder]'));
print "<li>total:".$total;

$item['distance']     = preg_replace("/[^0-9,.]/", "",$element->find('div.distance_holder', 0)->plaintext);
$item['media-body']    = $element->find('div.media-body h4', 0)->plaintext;
$output[] = $item;


de media-body haalt nu nog de text van de link maar ik moet de url hebben.
Wie ziet de laatste horde?

(ps. dit is simplehtmldom.sourceforge.net trouwens. Xpath is volgens mij voor xml vnl.)

Toevoeging op 17/03/2018 15:47:08:

haha

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
$link = $element->find('div[class=media-body] h4', 0)->innertext;


@Ariën, ja daar had ik naar gezocht maar kon hem niet vinden. Dus thanks voor de tip!
Gewijzigd op 17/03/2018 15:47:39 door Tim DK
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.