mboost-dp1
Udtræk af tabel via PHP
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej
Er det muligt at udtrække følgende to rækker fra en HTML side?
Det ville være smart hvis det kunne komme i et array eller via noget foreach.
Kunne man fx bruge PHP - HTML DOM Parser / Eller noget andet ?
Er det muligt at udtrække følgende to rækker fra en HTML side?
Det ville være smart hvis det kunne komme i et array eller via noget foreach.
Kunne man fx bruge PHP - HTML DOM Parser / Eller noget andet ?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html lang=EN-US>
<head>
<Meta Http-equiv="Content-Type" Content="text/html; CHARSET=UTF-8">
</head>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td width="100%">
<table border="0" width="100%" cellspacing="0" cellpadding="1">
<tr>
<td></td>
<td></td>
</tr>
</table>
</td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>
<table width=100% border="0" cellspacing="0" cellpadding="2">
<!-- Kolonne -->
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<!-- Kolonne Slut-->
<!-- 1. række som skal trækkes ud -->
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<!-- 1. række slut -->
<!-- 2. række som skal trækkes ud -->
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<!-- 2. række slut -->
</table>
</td>
</tr>
</table>
</body>
</html>
#1
Google termen er:
php html parser
Jeg finder bl.a.:
http://simplehtmldom.sourceforge.net/
Jeg vil tro at den kan navigere ned i dein TABLE.
Google termen er:
php html parser
Jeg finder bl.a.:
http://simplehtmldom.sourceforge.net/
Jeg vil tro at den kan navigere ned i dein TABLE.
#7
Tja.
Det er en "group note" ikke en recommendation.
XPath som er en recommendation siger for 1.0 og 2.0:
http://www.w3.org/TR/xpath/
http://www.w3.org/TR/2010/REC-xpath20-20101214/
Tja.
Det er en "group note" ikke en recommendation.
XPath som er en recommendation siger for 1.0 og 2.0:
http://www.w3.org/TR/xpath/
Abstract
XPath is a language for addressing parts of an XML document, designed to be used by both XSLT and XPointer.
http://www.w3.org/TR/2010/REC-xpath20-20101214/
Abstract
XPath 2.0 is an expression language that allows the processing of values conforming to the data model defined in [XQuery 1.0 and XPath 2.0 Data Model (Second Edition)]. The data model provides a tree representation of XML documents as well as atomic values such as integers, strings, and booleans, and sequences that may contain both references to nodes in an XML document and atomic values. The result of an XPath expression may be a selection of nodes from the input documents, or an atomic value, or more generally, any sequence allowed by the data model. The name of the language derives from its most distinctive feature, the path expression, which provides a means of hierarchic addressing of the nodes in an XML tree. XPath 2.0 is a superset of [XPath 1.0], with the added capability to support a richer set of data types, and to take advantage of the type information that becomes available when documents are validated using XML Schema. A backwards compatibility mode is provided to ensure that nearly all XPath 1.0 expressions continue to deliver the same result with XPath 2.0; exceptions to this policy are noted in [I Backwards Compatibility with XPath 1.0].
Er der en som kan gøre så jeg ikke få kolonnen med?
Her er min kode:
Her er min kode:
<?php
<!-- class hentet fra Arne_v's link -->
include("simple_html_dom.php");
$html = str_get_html('
<!-- HTMl fra Post #1 -->
');
$newhtml = $html->find('table', -1);
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML($newhtml);
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('table');
/*** get all rows from the table ***/
$rows = $tables->item(0)->getElementsByTagName('tr');
/*** loop over the table rows ***/
foreach ($rows as $row)
{
/*** get each column by tag name ***/
$cols = $row->getElementsByTagName('td');
/*** echo the values ***/
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue.'<br />';
echo $cols->item(3)->nodeValue.'<br />';
echo $cols->item(4)->nodeValue.'<br />';
echo $cols->item(5)->nodeValue.'<br />';
echo '<hr />';
}
?>
Du kan bruge PHP's DOMDocument og XPath til at navigere rundt, men jeg har brugt simplehtmldom en del, og synes den er lettere at bruge, hvis du bare hurtigt skal scrape noget fra en side. den har en selector syntax der MINDER meget om sizzleJS (Jquery).
Fifan (14) skrev:#13 Ved du så om det er muligt i dette værktøj at angive hvor mange table tags den skal springe over fx ?
Edit: misforstod spørgsmålet
$tables = $dom->getElementsByTagName('table')->item(1);
i simple html dom ville du nok gøre noget ala dette for at vælge alle tables der er child til den første table (hvis det er det du ønsker)
$tables = $html->find('table',0)->find('table');
$tables = $html->find('table',0)->find('table');
#18 ja:
$dom = file_get_html($url);
$tables = $dom->find('table',0)->find('table');
foreach($tables as $i => $table){
echo "Tabel #$i:\n";
foreach($table->find('tr') as $row){
foreach($row->find('td') as $cell){
echo $cell->plaintext .' | ';
}
echo "\n";
}
echo "\n";
}
#19 Det ser godt ud men er det muligt at få værdierne udskrevet enkeltvis med echo for hver td i det pågældende tr.
Eksempel:
foreach($row->find('td') as $cell){
echo $cell->plaintext .' | '; // række 1
echo $cell->plaintext .' | '; // række 2
echo $cell->plaintext .' | '; // række 3
}
Eksempel:
foreach($row->find('td') as $cell){
echo $cell->plaintext .' | '; // række 1
echo $cell->plaintext .' | '; // række 2
echo $cell->plaintext .' | '; // række 3
}
Denne kode gør hvad jeg har ønsket i forhold til at springe de to første tables over. Dog tager denne kode også den første tr med i tredje tabel og dette skal den ikke. Den skal starte fra anden tr.
Jeg har derfor prøvet at tilføje item(1) efter getElementsByTagName('tr')
Men det får jeg fejl på, det er som om at den kode kun kan skrives en gang.
Jeg har derfor prøvet at tilføje item(1) efter getElementsByTagName('tr')
Men det får jeg fejl på, det er som om at den kode kun kan skrives en gang.
$html = file_get_contents('content.html');
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML($html);
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('table');
/*** get all rows from the table ***/
$rows = $tables->item(2)->getElementsByTagName('tr');
/*** loop over the table rows ***/
foreach ($rows as $row)
{
/*** get each column by tag name ***/
$cols = $row->getElementsByTagName('td');
/*** echo the values ***/
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue.'<br />';
echo $cols->item(3)->nodeValue.'<br />';
echo $cols->item(4)->nodeValue.'<br />';
echo $cols->item(5)->nodeValue.'<br />';
echo '<hr />';
}
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.