0

CURL用来抓取这样的网站:

<?php

$url = "http://www.bbc.com/news/";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$curl_scraped_page = curl_exec($ch);
curl_close($ch);

$curl_scraped_page = preg_replace("#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#",'$1http://www.bbc.com/news/$2$3', $curl_scraped_page);

echo $curl_scraped_page;
?>

如您所见,这URL是为 BBC 新闻设置的。但是,我希望URL成为一个变量。变量必须是 的值parent.document。例如JQuery,我会这样做:

var value = $("input", parent.document.body).val(); 

我该如何设置这样的东西PHPparent.document我用 Google 搜索过,但在 PHP 中找不到任何相关信息。

4

1 回答 1

1

PHP是一种服务器端脚本语言,因此无法访问当前HTML页面。它在HTML发送到客户端浏览器之前被处理,因此parent.document在处理脚本时甚至不存在。

如果您想将数据从HTML页面传递到PHP脚本,您可以使用HTML <form>或通过JavaScript/JQuery AJAX请求来实现。

例如,以下代码会将 的值传递inputPHP脚本:

<html>
<head>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript">
function pass(){
    var value = $("input", parent.document.body).val(); 
    $.ajax({
        type: "POST",
        url: "myscript.php",
        data: { mydata: value }
    }).done(function( msg ) {
        alert( "Data Saved: " + msg );
    });
}
</script>
</head>
<body>
<input type="text" />
<button onclick="pass();return false;">Pass Value</button>
</body>
</html>

以及修改后的脚本(myscript.php):

<?php
$url = isset($_POST['mydata']) ? $_POST['mydata'] : '';
$curl_scraped_page = '';

if(!empty($url)){
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $curl_scraped_page = curl_exec($ch);
    curl_close($ch);

    $curl_scraped_page = preg_replace("#(<\s*a\s+[^>]*href\s*=\s*[\"'])(?!http)([^\"'>]+)([\"'>]+)#",'$1'.$url.'$2$3', $curl_scraped_page);
}

echo $curl_scraped_page;
?>

我建议使用 $(id) 来检索 an<input>而不是$("input",context).

例如

var value = $('#txt').val();

并且在HTML

<input type="text" id="txt" />

有关更多信息,JQuery.ajax请参见此处

于 2013-04-14T17:51:45.390 回答