【问题标题】:scraping javascript data with simple_html_dom.php使用 simple_html_dom.php 抓取 javascript 数据
【发布时间】:2017-03-07 00:50:45
【问题描述】:

我只是通过使用 simple_html_dom.php 从外部页面废弃脚本标签得到这个字符串

var secs = 0; 
var lastp = 0;
var newInstance = newObjce("xxx").setup(    
"more":[{.....}], 
"sources": [
{"file":"url1","label":"360p","default":"true"},
{"file":"url2","label":"480p"},
{"file":"url3","label":"720p"},
{"file":"url4","label":"1080p HD"}
], 
"morestuff":[{......}])

如何获取“源”[ ..this data...] 之间的数据并在 php 变量中赋值? 使 var_dump 到这个总是返回的字符串对象 使用 json_encode 对我不起作用,因为在应用并让 var_dump 始终返回字符串对象之后,这就是我认为 regexp 可以帮助我的原因

【问题讨论】:

    标签: php regex external


    【解决方案1】:

    我找到了一个解决方案,我发现这个页面可以在线生成正则表达式 http://txt2re.com/index-php.php3,留在这里解决我的问题的功能,如果将来有人需要这个

    $re1='.*?'; # Non-greedy match on filler
    $re2='("sources".*?\\[.*?\\])'; # Double Quote String 1
    if ($c=preg_match_all ("/".$re1.$re2."/is", $string, $matches))
    {
      $string1=$matches[1][0];
      print ($string1);
     }
    

    【讨论】:

      【解决方案2】:

      您希望完成的工作可以使用正则表达式完成,但它可能不是最佳选择。例如,您可以在sources 之后的第一个括号“[”和左括号之后的下一个右括号之后的停止匹配之间进行匹配。见https://regex101.com/r/mVVEGp/1

      但是,如果在您预期之前有一个右括号(例如,在字符串中),您就有可能遇到麻烦。使用适当的解析器解析 JSON 可能会更好。 json_decode 是一个完善的原生 PHP 实现。还有其他实现允许将 JSON 作为流读取,这对于大型数据集非常有效。

      简而言之,正则表达式可能不是此用例中的最佳选择。

      【讨论】:

      • 谢谢,我试着用 json_decode 来完成这个任务,但是来自 simple_html_dom 的数据是字符串,我不能在这个字符串上进行 json_encode 工作,因为 json_string 在这种方式数组上放了很多数据([ 0]=>(我需要搜索的所有代码都嵌套在这里),[1]=>(这里有更多不必要的代码));如果你有一个很好的例子来说明如何使用 json_decode 我真的非常感谢你
      • 重新阅读示例,它可能不是 JSON(只是 Javascript,有区别)。我更新了正则表达式以在第一个左括号之后的一行的最开头查找第一个右括号“]”。 regex101.com/r/mVVEGp/2。这可能会让你更接近你需要去的地方。注意标志“gsm”。如果没有适当的解析器,您的问题就没有好的解决方案。
      猜你喜欢
      • 2013-05-12
      • 1970-01-01
      • 2014-12-23
      • 2012-11-25
      • 1970-01-01
      • 2012-04-20
      • 1970-01-01
      • 2020-11-17
      • 1970-01-01
      相关资源
      最近更新 更多