【问题标题】:Scrape values from a javascript tag depending on a variable inside根据内部变量从 javascript 标记中刮取值
【发布时间】:2019-03-15 10:25:08
【问题描述】:

我正在编写一个 PHP 脚本来获取一些 JavaScript 变量值(地理坐标),这些值可以在单个 <script> 标记中找到,

<script>
....
myFirstVariableValue = 58.922;
mySecondVariableValue = -12.179;
....
myLastVariableValue = 45.425;
....
</script>

我不喜欢获取整个 HTML(它很大)并为整个页面内容上的每个变量使用正则表达式的想法,所以我想使用 xpath 来找到正确的脚本标签(那里很多很多)然后得到变量。

preg_match("myFirstVariableValue\ =\ (-?\d+.\d+)/",$HTML,$matches);
preg_match("mySecondVariableValue\ =\ (-?\d+.\d+)/",$HTML,$matches);
...
preg_match("myLastVariableValue\ =\ (-?\d+.\d+)/",$HTML,$matches);

所以,我想用 xpath 查询找到正确的脚本标签,然后只对脚本标签内容运行正则表达式。

问题是 xpath 查询:甚至可以做这样的事情吗?

【问题讨论】:

    标签: php xpath web-scraping


    【解决方案1】:

    经过大量尝试,我终于找到了正确的查询,而且非常简单。

    首先,我在脚本文本内容上使用 contains 获得正确的脚本

    $script = $xpath->query("//script/text()[contains(.,'myFirstVariableValue')]");
    

    之后,我可以使用$script 变量来限制正则表达式的范围

    preg_match("myFirstVariableValue\ =\ (-?\d+.\d+)/",$script->item(0)->textContent,$matches);
    preg_match("mySecondVariableValue\ =\ (-?\d+.\d+)/",$script->item(0)->textContent,$matches);
    ...
    preg_match("myLastVariableValue\ =\ (-?\d+.\d+)/",$script->item(0)->textContent,$matches);
    

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 1970-01-01
      • 2021-05-06
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      相关资源
      最近更新 更多