0

我正在使用 php ganon dom 解析器抓取一些 html 页面,但我被困在我需要从我的 javascript 之类的源中读取一些 javascript 的地方。

<script type="text/javascript">
    Event.observe(window, 'load', function() {
        ig_lightbox_main_img=0;
ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg');
ig_lightbox_img_labels.push("Some text");
ig_lightbox_img_sequence.push('http://someimageurl.com/image2.jpg');
ig_lightbox_img_labels.push("Some text 2");
    });
</script>

我想从上面的脚本中读取 url,该脚本与页面的 html 一起出现,我现在已经使用了这个代码

$html = str_get_dom('some page html here');
     foreach($html('.product-img-box script[type=text/javascript]') as $script){
     echo $script->html();
}

但这不起作用。关于如何阅读脚本的任何想法

4

1 回答 1

0

type=text/javascript尝试在对象的字符串中使用引号$html

我看了一下这里,他们有一个例子:

foreach($html('a[href ^= "http://"]') as $element) {
    $element->wrap('center');
}

我认为/可能是它返回了错误的结果。

编辑

之前被这个问题弄糊涂了,我认为问题是你无法在脚本中获取数据,这是因为你的选择器。无论如何,经过一番思考,如果你有一个包含数据的脚本标签的字符串副本,只需在它上面运行一个正则表达式。

这是我测试的一个例子:

$string = "<script type=\"text/javascript\">
    Event.observe(window, 'load', function() {
        ig_lightbox_main_img=0;
ig_lightbox_img_sequence.push('http://someimageurl.com/image.jpg');
ig_lightbox_img_labels.push(\"Some text\");
ig_lightbox_img_sequence.push('http://someimageurl.com/image2.jpg');
ig_lightbox_img_labels.push(\"Some text 2\");
    });
</script>";

$regex = "/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Za-z0-9+&@#\/%=~_|$?!:,.]*[A-Za-z0-9+&@#\/%=~_|$]/";

$results = array();

preg_match_all($regex,$string,$results);

var_dump($results);
//Result: array(1) { [0]=> array(2) { [0]=> string(33) "http://someimageurl.com/image.jpg" [1]=> string(34) "http://someimageurl.com/image2.jpg" } } 

$resultspreg_match_all其中包含从(文档)返回的 URL 数据。

如果有帮助,一旦你有了 URL,你就可以在 PHP 中使用parse_url文档),它将字符串 URL 拆分成更容易使用的东西。

注意:使用的正则表达式是一个非常简单的表达式,不会涵盖所有情况。如herehere所述,很难为此获得完美的正则表达式。

于 2013-04-28T07:30:09.143 回答