php simple_html_dom select 正确 table 数据
php simple_html_dom select correct table data
我在 html 文件中有 table(我感兴趣的片段):
<h3 class="subTitle">Odbitki</h3>
<div class="subtitleBottomEdge"></div>
<div class="pad10">
<table class="mainContentArea">
<tr>
<td class="labelFont">Wszystkie odbitki:</td>
<td class="itemFont">49946</td>
</tr>
<tr>
<td class="labelFont">Kompletne odbitki równoważności (A4/Letter):</td>
<td class="itemFont">49945.4</td>
</tr>
<tr>
<td class="labelFont">Arkusze dwustronne:</td>
<td class="itemFont">2735</td>
</tr>
</table>
</div>
我需要的只是在 "Wszystkie odbitki" 之后显示一个数字,例如:Wszystkie odbitki: 49946
我知道在 simple_html_dom 中可以,但我不知道如何使用 PHP。
代码:
require_once('simple_html_dom.php');
$html = file_get_html('http://127.0.0.1/tabela.html');
$table = null;
$needle = 'Odbitki';
foreach($html->find('h3') as $marker) {
if ($marker->innertext == $needle) {
$table = $marker->next_sibling();
break;
}
}
$data = array();
if ($table) {
foreach($table->children() as $k => $tr) {
foreach($tr->children as $td) {
$data[$k][] = $td->innertext;
}
}
}
echo '<pre>';
print_r($data);
根据提供的 html 结构,您需要更改此行:
if($marker->innertext == $needle) {
$table = $marker
// `next_sibling` gets `div class="subtitleBottomEdge"`
->next_sibling()
// `next_sibling` gets `<div class="pad10">`
->next_sibling()
// `first_child` gives you a required table
->first_child();
break;
}
更新一个单元格,例如:
foreach($table->children() as $k => $tr) {
$data[$k][] = $tr
// `first_child` gets first `td`
->first_child()
// `next_sibling` gets second `td`
->next_sibling()
->innertext;
}
步骤 1. 准备
The first thing you'll need to do is download a copy of the
simpleHTMLdom library, freely available from sourceforge.
下载中有多个文件,但您唯一需要的是 simple_html_dom.php 文件;其余的是示例和文档。
https://sourceforge.net/projects/simplehtmldom/
步骤 2. 解析基础知识
这个库非常易于使用,但在将其付诸实践之前,您应该了解一些基础知识。
加载中HTML
$html = new simple_html_dom();
// Load from a string
$html->load('<html><body><p>Hello World!</p><p>We're here</p></body>
</html>');
// Load a file
$html->load_file('http://net.tutsplus.com/');
您可以通过从字符串或文件加载 HTML 来创建初始对象。可以通过 URL 或通过本地文件系统加载文件。
获得 DOM 对象后,您可以通过使用 find() 和创建集合来开始使用它。集合是通过选择器找到的一组对象——语法与 jQuery 非常相似。
在你自己的问题中page1.html
<h3 class="subTitle">Odbitki</h3><div class="subtitleBottomEdge"></div>
<div class="pad10"><table class="mainContentArea">
<tr>
<td class="labelFont">Wszystkie odbitki:</td>
<td class="itemFont">49946</td>
</tr>
<tr>
<td class="labelFont">Kompletne odbitki równoważności (A4/Letter):</td>
<td class="itemFont">49945.4</td>
</tr>
<tr>
<td class="labelFont">Arkusze dwustronne:</td>
<td class="itemFont">2735</td>
</tr>
在这个例子HTML中,我们将看看如何访问第二段中的信息,更改它,然后输出结果。
# create and load the HTML
include('simple_html_dom.php');
$html = new simple_html_dom();
$html->load("page1.html");
# get an element representing the second paragraph
$element1 = $html->find('.labelFont');
$element2 = $html->find('.itemFont');
# modify it
$element1->innertext .= $element2->innertext;
# output it!
echo $html->save();
我在 html 文件中有 table(我感兴趣的片段):
<h3 class="subTitle">Odbitki</h3>
<div class="subtitleBottomEdge"></div>
<div class="pad10">
<table class="mainContentArea">
<tr>
<td class="labelFont">Wszystkie odbitki:</td>
<td class="itemFont">49946</td>
</tr>
<tr>
<td class="labelFont">Kompletne odbitki równoważności (A4/Letter):</td>
<td class="itemFont">49945.4</td>
</tr>
<tr>
<td class="labelFont">Arkusze dwustronne:</td>
<td class="itemFont">2735</td>
</tr>
</table>
</div>
我需要的只是在 "Wszystkie odbitki" 之后显示一个数字,例如:Wszystkie odbitki: 49946
我知道在 simple_html_dom 中可以,但我不知道如何使用 PHP。
代码:
require_once('simple_html_dom.php');
$html = file_get_html('http://127.0.0.1/tabela.html');
$table = null;
$needle = 'Odbitki';
foreach($html->find('h3') as $marker) {
if ($marker->innertext == $needle) {
$table = $marker->next_sibling();
break;
}
}
$data = array();
if ($table) {
foreach($table->children() as $k => $tr) {
foreach($tr->children as $td) {
$data[$k][] = $td->innertext;
}
}
}
echo '<pre>';
print_r($data);
根据提供的 html 结构,您需要更改此行:
if($marker->innertext == $needle) {
$table = $marker
// `next_sibling` gets `div class="subtitleBottomEdge"`
->next_sibling()
// `next_sibling` gets `<div class="pad10">`
->next_sibling()
// `first_child` gives you a required table
->first_child();
break;
}
更新一个单元格,例如:
foreach($table->children() as $k => $tr) {
$data[$k][] = $tr
// `first_child` gets first `td`
->first_child()
// `next_sibling` gets second `td`
->next_sibling()
->innertext;
}
步骤 1. 准备
The first thing you'll need to do is download a copy of the simpleHTMLdom library, freely available from sourceforge.
下载中有多个文件,但您唯一需要的是 simple_html_dom.php 文件;其余的是示例和文档。 https://sourceforge.net/projects/simplehtmldom/
步骤 2. 解析基础知识
这个库非常易于使用,但在将其付诸实践之前,您应该了解一些基础知识。
加载中HTML
$html = new simple_html_dom();
// Load from a string
$html->load('<html><body><p>Hello World!</p><p>We're here</p></body>
</html>');
// Load a file
$html->load_file('http://net.tutsplus.com/');
您可以通过从字符串或文件加载 HTML 来创建初始对象。可以通过 URL 或通过本地文件系统加载文件。 获得 DOM 对象后,您可以通过使用 find() 和创建集合来开始使用它。集合是通过选择器找到的一组对象——语法与 jQuery 非常相似。 在你自己的问题中page1.html
<h3 class="subTitle">Odbitki</h3><div class="subtitleBottomEdge"></div>
<div class="pad10"><table class="mainContentArea">
<tr>
<td class="labelFont">Wszystkie odbitki:</td>
<td class="itemFont">49946</td>
</tr>
<tr>
<td class="labelFont">Kompletne odbitki równoważności (A4/Letter):</td>
<td class="itemFont">49945.4</td>
</tr>
<tr>
<td class="labelFont">Arkusze dwustronne:</td>
<td class="itemFont">2735</td>
</tr>
在这个例子HTML中,我们将看看如何访问第二段中的信息,更改它,然后输出结果。
# create and load the HTML
include('simple_html_dom.php');
$html = new simple_html_dom();
$html->load("page1.html");
# get an element representing the second paragraph
$element1 = $html->find('.labelFont');
$element2 = $html->find('.itemFont');
# modify it
$element1->innertext .= $element2->innertext;
# output it!
echo $html->save();