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

Posted

技术标签:

【中文标题】使用 Simple HTML Dom Parser 使用特定关键字抓取 <script> 标记【英文标题】:Scraping <script> tag with certain keyword using Simple HTML Dom Parser 【发布时间】:2015-10-25 23:45:35 【问题描述】:

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

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

我开始意识到顺序会因页面而异(而且这不是一种可扩展的方式,因为它可能随时更改)。我怎样才能在我需要的标签中搜索关键字,然后拉回完整的标签?例如,我需要的标签总是包含字符串“PRODUCT_METADATA”。

提前感谢您的任何想法!

【问题讨论】:

将 Xpath 与 simpleXML aor DomDocument 一起使用 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于使用 Simple HTML Dom Parser 使用特定关键字抓取 <script> 标记的主要内容,如果未能解决你的问题,请参考以下文章

使用 PHP Simple HTML DOM Parser 获取文本

如何使用 PHP Simple HTML DOM Parser 提取标题和元描述?

PHP Simple HTML DOM Parser 如何使用 find 方法获取第三个表

如何使用 Simple HTML Dom Parser 从 HTML 中删除类和 ID 属性

Java 等价于 PHP Simple HTML DOM Parser

致命错误:未捕获的错误:调用成员函数 find() PHP simple_html_dom_parser [重复]