使用简单 HTML Dom 解析器使用特定关键字抓取 <script> 标签
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;
}
}
我正在尝试使用简单 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;
}
}