使用 PHP 简单 HTML DOM 抓取数据
Scraping data using PHP Simple HTML DOM
我的结构是这样的:
<tr>
<td>
<strong>Tel. nr.:</strong>
+370 000 000
<strong>Faksas:</strong>
+370 5 0000
</td>
</tr>
我刚开始使用 Simple HTML DOM。我需要的是内容 +370 000 000 和 +370 5 0000 。我看到这个库不支持 Xpath,我如何编写一个查询,我可以在 HTML link <strong>Tel. nr.:</strong>
之后提取内容?
我只找到一种方法,获取 HTML 并使用正则表达式从 </strong>
获取文本到 <strong>
,但也许简单 HTML DOM 有自己的这个的方法?
这样试试...
<?php
require('simple_parser.php');
$html = str_get_html('
<tr>
<td>
<strong>Tel. nr.:</strong>
+370 000 000
<strong>Faksas:</strong>
+370 5 0000
</td>
</tr>');
$td =$html->find('td',0) ;
echo $td->plaintext;
?>
Post您的完整代码以获得明确的答案
您可以使用 ->find('text')
来获取文本节点:
$sample_html = '
<table>
<tr>
<td>
<strong>Tel. nr.:</strong>
+370 000 000
<strong>Faksas:</strong>
+370 5 0000
</td>
</tr>
</table>
';
$html = str_get_html($sample_html);
foreach($html->find('tr') as $row) {
$first_td = $row->find('td', 0);
echo $first_td->find('text', 2);
echo $first_td->find('text', 4);
}
但是这个解决方案相当笨拙。删除元素上的换行符会产生另一个结果。
我建议将 DOMDocument
与 xpath 一起使用:
$dom = new DOMDocument;
$dom->loadHTML($sample_html);
$xpath = new DOMXpath($dom);
$elements = $xpath->query('//tr[1]/td[1]/text()');
foreach($elements as $e) {
echo trim($e->textContent) . '<br/>';
}
我的结构是这样的:
<tr>
<td>
<strong>Tel. nr.:</strong>
+370 000 000
<strong>Faksas:</strong>
+370 5 0000
</td>
</tr>
我刚开始使用 Simple HTML DOM。我需要的是内容 +370 000 000 和 +370 5 0000 。我看到这个库不支持 Xpath,我如何编写一个查询,我可以在 HTML link <strong>Tel. nr.:</strong>
之后提取内容?
我只找到一种方法,获取 HTML 并使用正则表达式从 </strong>
获取文本到 <strong>
,但也许简单 HTML DOM 有自己的这个的方法?
这样试试...
<?php
require('simple_parser.php');
$html = str_get_html('
<tr>
<td>
<strong>Tel. nr.:</strong>
+370 000 000
<strong>Faksas:</strong>
+370 5 0000
</td>
</tr>');
$td =$html->find('td',0) ;
echo $td->plaintext;
?>
Post您的完整代码以获得明确的答案
您可以使用 ->find('text')
来获取文本节点:
$sample_html = '
<table>
<tr>
<td>
<strong>Tel. nr.:</strong>
+370 000 000
<strong>Faksas:</strong>
+370 5 0000
</td>
</tr>
</table>
';
$html = str_get_html($sample_html);
foreach($html->find('tr') as $row) {
$first_td = $row->find('td', 0);
echo $first_td->find('text', 2);
echo $first_td->find('text', 4);
}
但是这个解决方案相当笨拙。删除元素上的换行符会产生另一个结果。
我建议将 DOMDocument
与 xpath 一起使用:
$dom = new DOMDocument;
$dom->loadHTML($sample_html);
$xpath = new DOMXpath($dom);
$elements = $xpath->query('//tr[1]/td[1]/text()');
foreach($elements as $e) {
echo trim($e->textContent) . '<br/>';
}