我正在尝试通过网址抓取亚马逊产品。我用 file_get_contents 尝试过它,它在本地主机上运行良好。现在我将它上传到我的服务器,我总是收到来自亚马逊的验证码,说“带有 cookie 的浏览器效果更好”。我尝试使用 cUrl 启用 cookie,但我仍然收到此错误。 我试过了
private function getDataFromUrl(String $strUrl): String
{
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_ENCODING => '', // Warning: if we don't say "Accept-Encoding: gzip", the SOB's at Amazon will send it gzip-compressed anyway.
CURLOPT_URL => $strUrl
));
return curl_exec($ch);
}
和
private function getDataFromUrl(String $strUrl): String
{
/* STEP 1. let’s create a cookie file */
$ckfile = tempnam (DIRECTORY."/includes/tmp", "CURLCOOKIE");
/* STEP 2. visit the homepage to set the cookie properly */
$ch = curl_init ($strUrl);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec ($ch);
/* STEP 3. visit cookiepage.php */
$ch = curl_init ($strUrl);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
return curl_exec ($ch);
}
没有任何效果。你能给我提供一种我可以抓取亚马逊产品页面的方法吗? 谢谢!
答案 0 :(得分:2)
虽然抓取在美国是合法的,但最好在可用时使用 API。亚马逊检测并阻止抓取工具。 Amazon product advertising API 的问题在于先决条件是一个 Amazon Associates 帐户,它是联盟营销计划,需要您推动产品销售......所以它实际上并不可行。过去,使用他们的 API 不存在此要求。
首先,您需要设置标题和 cookie。但这仍然不可行。如果您快速向亚马逊发送请求,您会发现很快就会遇到 502 代码,因为来自您的 IP 的请求数量众多。
您真正需要做的是使用代理服务。存在几种,但它们都是付费服务。您为每个成功的请求付费。 Proxycrawl 就是一个例子。这将确保您获得页面的详细信息。
或者您可以使用 Keepa API。 Keepa 是一个浏览器小部件,可通过其用户抓取亚马逊。这里的缺点是数据可能不是实时的。一个项目越活跃,它被刮擦的频率就越高。您可以提取价格、优惠、评论、评分等。