根据元素标签名称从HTML字符串中提取自定义tr



我想提取html源的某些部分,这是它需要的部分:

<tr data-market-row="price_eur" data-title="" class="pointer " onclick="if (!window.__cfRLUnblockHandlers) return false; window.location='profile/price_eur'" data-price="321,110" data-url="">

我需要提取具有data-market-row="price_eur",我试过这个代码,但它不工作:

$html = str_get_html($str);
foreach ($html->find('tr.data-market-row') as $e)
$a = $e->outertext;

如何去掉这个标签名为

的tr行?
data-market-row="price_eur"

thanks in advance

看起来您正在使用简单的HTML DOM解析器,并且您的选择器有问题。试试这个:

$html = str_get_html($str);
foreach ($html->find('tr[data-market-row]') as $e) {
echo "<pre>TAG: "; print_r($e->tag); echo "</pre>";
echo "<pre>PRICE: "; print_r($e->getAttribute('data-price')); echo "</pre>";
echo "<pre>OUTER: "; print_r($e->outertext); echo "</pre>";
echo "<pre>INNER: "; print_r($e->innertext); echo "</pre>";
echo "<pre>PLAIN: "; print_r($e->plaintext); echo "</pre>";
echo "ELEMENT: <pre>"; echo "<pre>"; print_r($e); echo "</pre>"; echo "</pre>"; exit;
}

这里我输出了$e的各种属性,并且元素似乎没有内部文本、外部文本或纯文本。您可以访问price属性。我只是打印了变量,以便您可以看到它们。如果您想将价格转换为变量,请使用以下命令:

$price = $e->getAttribute('data-price');

下面是如何提取tr的示例带有属性的标签data-market-row="price_eur">:

$txt = '<tr data-market-row="price_eur" data-title="" class="pointer " onclick="if (!window.__cfRLUnblockHandlers) return false; window.location='profile/price_eur'" data-price="321,110" data-url="">' .
'<tr some-other stuff here>' .
'<tr data-market-row="price_eur">' .
$pattern = '/<tr [^>]*data-market-row="price_eur"[^>]*>/';
preg_match_all($pattern, $txt, $matches);
print_r($matches[0]);
/*  Here is the output:
Array
(
[0] => <tr data-market-row="price_eur" data-title="" class="pointer " onclick="if (!window.__cfRLUnblockHandlers) return false; window.location='profile/price_eur'" data-price="321,110" data-url="">
[1] => <tr data-market-row="price_eur">
)
*/

如果您不想匹配包含类似表行的javascript字符串或html注释(或类似的),则示例失败。

最新更新