刮& lt; script>使用简单的HTML Dom解析器标记某些关键字


Scraping <script> tag with certain keyword using Simple HTML Dom Parser

我试图使用简单的HTML Dom从一组网页中抓取<script>标签。一开始,我通过提供我需要的标签的数字顺序来拼凑它:

$script = $html->find('script', 17); //The tag I need is typically the 18th <script> tag on the page

我已经意识到顺序根据页面的不同而不同(这不是一种可扩展的方式,因为它可以随时改变)。我如何在标签中搜索我需要的关键字,然后拉回完整的标签?例如,我需要的标签总是包含字符串"PRODUCT_METADATA"。

提前感谢任何想法!

我最终使用下面的代码来搜索我的关键字的所有脚本标签:

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

它工作,但对我来说,我试图找到一个csrf令牌隐藏在一个脚本标签,起初不能让它工作,所有得到的是NULL

我的解决方案是use explode()的脚本s和非常重要的记住->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;
    }
}