使用Simple HTML Dom Parser使用特定关键字刮取<script>标记

时间:2015-08-03 18:46:31

标签: javascript php parsing dom simple-html-dom

我正在尝试使用Simple HTML Dom从一组网页中抓取&lt; script&gt; 标记。首先,我通过提供我需要的标签的数字顺序来抓取它:

&#xA;&#xA;
  $ script = $ html-&gt; find('script', 17); //我需要的标签通常是第18个&lt; script&gt;页面上的标签&#xA;  
&#xA;&#xA;

我已经意识到订单因页面而异(而且它不是一种可扩展的方式因为它可以随时改变)。如何在标签中搜索我需要的关键字然后拉回完整标签?例如,我需要的标签始终包含字符串“PRODUCT_METADATA”。

&#xA;&#xA;

提前感谢任何想法!

&#xA;

2 个答案:

答案 0 :(得分:4)

我最终使用以下代码搜索我的关键字的所有脚本代码:

$scripts = $html->find('script');
    foreach($scripts as $s) {
        if(strpos($s->innertext, 'PRODUCT_METADATA') !== false) {
            $script = $s;
        }
    }

答案 1 :(得分:0)

它有效,但对我来说,我试图找到隐藏在脚本标签中的 csrf 令牌,起初无法使其工作,所有得到的都是 NULL

我的解决方案是脚本 s 上的 use explode(),非常重要的是记住 ->innertext 否则你无法得到 string

我很幸运,令牌被双引号括起来,所以很容易获得。

我的最终代码如下所示:

$scripts = $html->find('script');
foreach($scripts as $s) {
    if (strpos($s->innertext, 'csrf_token') !== false) {
        $script_array = explode('"', $s->innertext);
        $token = $script_array[1];
        break;
    }
}