Thursday, September 1, 2022

[SOLVED] How to Fetch Amazon Product Data By Php Without Api

Issue

I want to fetch data from the amazon search result and product details. I Found some source to get data by api . But i am searching for get product information without api . As example : href="https://rads.stackoverflow.com/amzn/click/com/B07ZPC9QD4" rel="nofollow noreferrer" rel="nofollow noreferrer">https://www.amazon.com/Apple-MWP22AM-A-AirPods-Pro/dp/B07ZPC9QD4 this is an amazon product links. I want fetch this product data. I also try by cUrl/file get contents but failed. Please someone can help ?

Here Code Example i try, But Its Required Capcha

$curl = curl_init('https://www.amazon.com/gp/product/B00M0QVG3W');
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 10.10; labnol;) ctrlq.org");
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($curl);
curl_close($curl);

echo $html;

Solution

curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 10.10; labnol;) ctrlq.org");

why are you lying to them? you're not a web browser, and Amazon doesn't seem to block people who aren't lying about it..

this:

<?php
declare(strict_types = 1);
$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 => 'https://www.amazon.com/Apple-MWP22AM-A-AirPods-Pro/dp/B07ZPC9QD4'
));
$html = curl_exec($ch);
@($domd = new DOMDocument())->loadHTML($html);
$xp=new DOMXPath($domd);
$product=[];
$product["productName"]=trim($domd->getElementById("productTitle")->textContent);
$product["stock"]=trim($domd->getElementById("availability")->textContent);
$prodInfo=$xp->query("//*[@id='productOverview_feature_div']//tr[contains(@class,'a-spacing-small')]");
foreach($prodInfo as $info){
    $product[trim($info->getElementsByTagName("td")->item(0)->textContent)]=trim($info->getElementsByTagName("td")->item(1)->textContent);
}
var_export($product);

prints:

array (
  'productName' => 'Apple AirPods Pro',
  'stock' => 'Temporarily out of stock.
(bunch of newlines)
We are working hard to be back in stock as soon as possible.',
  'Brand' => 'Apple',
  'Connections' => 'Wireless',
  'Model Name' => 'Apple AirPods Pro',
  'Color' => 'White',
  'Headphones Form Factor' => 'In Ear',
)


Answered By - hanshenrik
Answer Checked By - Candace Johnson (WPSolving Volunteer)