gpt4 book ai didi

php - 通过网页抓取提取 JavaScript 变量值

转载 作者:可可西里 更新时间:2023-10-31 22:47:58 25 4
gpt4 key购买 nike

对于一个公司项目,我需要使用 PHP 和 JavaScript(包括 jQuery)创建一个网络抓取应用程序,该应用程序将从我们客户网站的每个页面中提取特定数据。抓取应用程序需要为每个页面获取两种类型的数据:1) 确定是否存在具有特定 ID 的某些 HTML 元素,以及 2) 提取特定 JavaScript 变量的值。每个页面的JS变量名称相同,但值通常不同。

我相信我知道如何获得第一个数据要求:使用 PHP file_get_contents() 函数获取每个页面的 HTML,然后使用 JavaScript/jQuery 解析该 HTML 并搜索具有特定 ID 的元素。但是,我不确定如何获取第二条数据——JavaScript 变量值。甚至在每个页面的 HTML 中都找不到 JavaScript 变量;相反,它位于链接到页面的外部 JavaScript 文件中。即使 JavaScript 嵌入到页面的 HTML 中,我也知道 file_get_contents() 只会提取 JavaScript 代码(和其他 HTML),而不提取任何变量值。

谁能建议一种为给定网站的每个页面获取此变量值的好方法?

编辑:澄清一下,我需要运行 JavaScript 代码后的 JavaScript 变量值。这样的事情甚至可能吗?

最佳答案

你说你需要JS执行完后的变量值。我假设它始终是相同的 JS,只是初始变量值发生了变化。最好的办法是将 JS 移植到 PHP,这样您就可以提取初始 JS 变量值,然后假装您执行了 JS。

这是一个从 JavaScript 中提取变量值的函数:


/**
* extracts a variable value given its name and type. makes certain assumptions about the source,
* i.e. can't handle strings with escaped quotes.
*
* @param string $jsText the JavaScript source
* @param string $name the name of the variable
* @param string $type the variable type, either 'string' (default), 'float' or 'int'
* @return string|int|float the extracted variable value
*/
function extractVar($jsText, $name, $type = 'string') {
if ($type == 'string') {
$valueMatch = "(\"|')(.*?)(\"|')";
} else {
$valueMatch = "([0-9.]+?)";
}

preg_match("/$name\s*\=\s*$valueMatch/", $jsText, $matches);
if ($type == 'string') {
return $matches[2];
} else if ($type == 'float') {
return (float)$matches[1];
} else if ($type == 'int') {
return (int)$matches[1];
} else {
return false;
}
}

关于php - 通过网页抓取提取 JavaScript 变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5951395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com