使用安全登录抓取网站内容
Posted
技术标签:
【中文标题】使用安全登录抓取网站内容【英文标题】:Scrape a site content With a Secure Login 【发布时间】:2012-06-25 16:02:24 【问题描述】:我正在尝试在登录安全的情况下抓取网站的内容 但做不到 该站点的登录有三个选项用户名,密码,密码 这是我正在使用的代码
<?php
// HTTP authentication
$url = "http://aftabcurrency.com/login_script.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$cookie = 'cookies.txt';
$timeout = 30;
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch,CURLOPT_POSTFIELDS,"user_name=user&user_password=pass&passcode=code");
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
【问题讨论】:
我用您在答案中接受的更改尝试了此代码,但此代码对我不起作用,我正在使用我的亚马逊卖家帐户的详细信息,但没有任何反应,您能指导我吗? PHP 新手。 【参考方案1】:您需要将POST
转至http://aftabcurrency.com/login_script.php
您的 curl 还需要接受 cookie。
验证后脚本将重定向您,因此您还需要添加 CURLOPT_FOLLOWACTION。
这是您脚本的编辑版本,我无法在 http://aftabcurrency.com/ 上对其进行测试,希望它有效:
$url = "http://aftabcurrency.com/login_script.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
$cookie = 'cookies.txt';
$timeout = 30;
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout );
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch,CURLOPT_POSTFIELDS,"user_name=user&user_password=pass&passcode=code");
$result = curl_exec($ch);
/* //OPTIONAL - Redirect to another page after login
$url = "http://aftabcurrency.com/some_other_page";
curl_setopt ($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
*/ //end OPTIONAL
curl_close($ch);
echo $result;
【讨论】:
谢谢它的工作原理如果我想从该页面中抓取特定的“文本”,例如aftabcurrency.com,我只想抓取“我们的服务很重要!” (这段文字每天都在变化)有什么想法吗? 抓取html内容的方法有很多:php字符串搜索函数、正则表达式、dom/simplexml(xpath)... 你能给我一个简短的提示或任何教程的链接吗? 你能告诉我如何通过 curl 我的意思是如何集成到上面的代码中?【参考方案2】:您需要将您的用户名/密码/密码发布到该页面。您现在正在尝试做的是 http 身份验证。 所以不是这个
curl_setopt($ch, CURLOPT_USERPWD, "demo:demopass:demopasscode");
你需要这个
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, "user_name=xxxxx&user_password=xxxxxx&passcode=xxxxx");
【讨论】:
以上是关于使用安全登录抓取网站内容的主要内容,如果未能解决你的问题,请参考以下文章