0

我正在编程 php 抓取器。我想抓取一些文本,然后将抓取的内容与上次扫描时存储在我的数据库中的内容进行比较。一切正常。但我想扫描“过滤器”表单所在的 url,以便它发布一些数据,因此我看不到要扫描的确切 url。有什么办法吗,我的脚本会提交带有我想要的数据的表单,这样它就会显示我想要的脚本内容,然后我可以抓取内容?

它就像

$url = 'myurl'; 
$data=get_data($url);
$grabbed=strip_tags(get_match('some regex',$data);

function get_data($url){
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
function get_match($regex,$content)
{
    preg_match($regex,$content,$matches);
    return $matches[1];
}

这很好用,但我需要该 url 上的表单提交脚本,这将使我的内容可访问。那可能吗?

非常感谢,

马丁。

更新 :

    <?php
//url
$url = "http://data.skga.sk/Tournaments.aspx";

//get the page content
$content = get_data($url);
echo $content;
  


//gets the match content
function get_match($regex,$content)
{
    preg_match($regex,$content,$matches);
    return $matches[1];
}

//gets the data from a URL
function get_data($url)
{
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "ctl00%24RightContentPlaceholder%24dpTo=20.10.2012");
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
?>

那是我现在的代码。但我仍然不知道如何解决它。当我在浏览器中执行http://data.skga.sk/Tournaments.aspx?ctl00%24RightContentPlaceholder%24dpTo=20.10.2012很好。但是当我运行这个 php 时,我可以看到默认页面

4

2 回答 2

0

如果您使用 curl,您可能希望用于curl_setopt($ch, CURLOPT_POST, 1)切换到 POST 请求并curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields)携带您需要包含在请求中的任何发布数据。curl_setopt 文档中有关 Curl 选项的更多信息。

于 2012-09-20T10:12:06.503 回答
0

您可以像这样处理发布请求:

curl_setopt($curl_handler, CURLOPT_POST, true);
curl_setopt($curl_handler, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl_handler, CURLOPT_URL, $url);

... 其中 $url 是来自的 url <form action="[url]" [...],$postdata 是一个 urlencoded 字符串,例如 'para1=val1¶2=val2&...'。

另见: http: //php.net/manual/en/function.curl-setopt.php

示例:您要提交如下表单:

<form action="http://example.com/login.php" method="post">
    <input type="text" name="name" />
    <input type="password" name="password" />
    <input type="submit" />
</form>

这就是你要做的:

<?php
$curl_handler = curl_init();

curl_setopt($curl_handler, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_handler, CURLOPT_POST, true);
curl_setopt($curl_handler, CURLOPT_POSTFIELDS, "name=admin&password=secret");
curl_setopt($curl_handler, CURLOPT_URL, "http://example.com/login.php");

$data = curl_exec($curl_handler);
curl_close($curl_handler);
?>
于 2012-09-20T10:11:14.720 回答