使用安全登录抓取网站内容

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"); 

【讨论】:

以上是关于使用安全登录抓取网站内容的主要内容,如果未能解决你的问题,请参考以下文章

网站爬取-案例四:知乎抓取(COOKIE登录抓取个人中心)(第二卷)

使用需要登录的 Beautiful Soup 抓取网站

抓取需要使用 BeautifulSoup 登录的网站

抓取网页内容

使用用户名和密码登录后如何抓取网站

如何使用 Python 登录网站进行抓取