DomXPath href uit node halen obv van een andere node
Code (php)
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
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>
<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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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";
}
?>
$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.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 17/03/2018 14:10:07 door - Ariën -
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 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)
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.
Code (php)
1
2
3
4
5
6
7
8
9
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;
//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
@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