我正在编程php抓取器。我想获取一些文本,然后将抓取的内容与上次扫描中存储在我的数据库中的内容进行比较。一切正常。但我想扫描网址在哪里是一个“过滤器”形式,所以它发布了一些数据,因此我无法看到准确的网址扫描。有什么办法,我的脚本将提交该表单与我想要的数据,所以它将显示我想要的脚本内容,之后我可以获取内容?
类似
$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];
}
这很好用,但我需要在该网址上创建一个submison脚本,以便我的内容可访问。这可能吗?
非常感谢,
马丁。
<?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我可以看到默认页面
答案 0 :(得分:0)
你可以处理这样的帖子请求:
curl_setopt($curl_handler, CURLOPT_POST, true);
curl_setopt($curl_handler, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($curl_handler, CURLOPT_URL, $url);
...其中$ url是来自<form action="[url]" [...]
的网址,而$ postdata是一个urlencoded字符串,例如'para1 = val1&amp; para2 = val2&amp; ...'。
另请参阅: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);
?>
答案 1 :(得分:0)
如果您正在使用curl,则可能需要使用curl_setopt($ch, CURLOPT_POST, 1)
切换到POST请求,并使用curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields)
来携带您需要包含在请求中的任何帖子数据。有关curl_setopt documentation中的卷曲选项的更多信息。