我正在尝试使用Simple HTML Dom从一组网页中抓取< script>
标记。首先,我通过提供我需要的标签的数字顺序来抓取它:
$ script = $ html-> find('script', 17); //我需要的标签通常是第18个< script>页面上的标签



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


提前感谢任何想法!

答案 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;
}
}