使用PHP cURL从网站获取收入

时间:2012-03-04 22:22:07

标签: php curl

我试图通过cURL从登录页面获取网站收入。我知道这是一种草率的方式,但我别无选择。

<?php
$username = "example";
$password = "example";
$postfields = "email=$username&password=$password";
// Use Curl to return the raw source of a webpage to a variable called 
$ch = curl_init();
//curl_setopt($ch, CURLOPT_HEADER, 1); // Get the header
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // Allow redirection
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie");
curl_setopt($ch, CURLOPT_URL, "https://www.domain.com/login");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "$postfields");

$page = curl_exec($ch);
curl_close($ch); // Closing

if (preg_match("/<th>(.*)<\/th/s", $page, $matches)) {
    echo $matches[1];
}
?>

基本上我能够通过登录很好,它会将我重定向到我试图从中获取收入的特定网站的仪表板,但是当尝试使用preg_match它没有抓住任何东西时,它只是打印所有仪表板的HTML。

我只想获得&#34; 99.99美元&#34;在

之内
<th>$99.99</th>

非常感谢。

2 个答案:

答案 0 :(得分:1)

你的正则表达式是贪婪的,如果有多个<th>,它可能会抓取几个[^<]+的内容。尝试使用正则表达式解析HTML或XML通常不是一个好主意。 HTML解析器将更有效地完成此任务。我偏爱DOMDocument

要解决手头的问题,<会收集所有字符,但不包括下一个if (preg_match("/<th>([^<]+)<\/th/s", $page, $matches)) { echo $matches[1]; }

preg_match_all()

如果要检索多个<th>,请使用{{1}},因为上面只会获得第一个。{/ p>

答案 1 :(得分:1)

将此行添加到您的代码中:

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

..否则curl只打印出会话结果。我建议你的正则表达式也不贪婪:它现在只有一个<th>,但这部分代码可能被复制粘贴(作为一个完美的工作)到其他程序中 - 并且会导致麻烦。 )