亚马逊:是否可以在亚马逊搜索结果的 URL 中指定邮政编码?

问题描述 投票:0回答:1

我注意到一个问题。如果我复制带有搜索结果的 Amazon URL,而具有其他 IP 的人打开它,那么结果可能会有所不同。 例如: https://www.amazon.com/s/ref=sr_nr_p_36_0?lo=toys-and-games&rh=n%3A165793011%2Cp_72%3A1248964011&sort=price-desc-rank&low-price=34.99&high-price=34.99

如果您从达拉斯 IP 打开此 URL,您将获得 102 页结果。

如果你用 Honolulu IP 打开它,你会得到 101 页。

如果你从俄罗斯 IP 打开它,你会得到 93 页。

是否可以在 url 中指定用于运送的美国邮政编码,以便它为每个 IP 地址显示相同的结果?

我注意到的另一个小问题——它为不同的人显示不同的页面布局。有时它是默认的蓝色链接,有时它有银色按钮。也许有人知道如何使用 url 参数将设计锁定到一个布局? :)

web-scraping url get
1个回答
1
投票

没有简单的解决方案,所以这是我的复杂方法。

想法是:您必须发送与在浏览器中手动更改 ZIP 时发送的请求相同的请求。然后您的邮政编码将在您的会话中被记住。

这是我在 PHP 中使用 GuzzleHttp 客户端的解决方案:

$jar = new \GuzzleHttp\Cookie\CookieJar();
$client = new \GuzzleHttp\Client([
    'headers' => [
        'accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'accept-language' => 'en;q=0.8',
        'user-agent' => '', //set some User-Agent or just leave it empty cos it works too
        'x-requested-with' => 'XMLHttpRequest'
    ],
    'cookies' => $jar,
]);

try {
    $client->post('https://www.amazon.com/gp/delivery/ajax/address-change.html', [
        'form_params' => [
            'locationType' => 'LOCATION_INPUT',
            'zipCode' => '11219', //YOUR ZIP HERE
            'storeContext' => 'office-products',
            'deviceType' => 'web',
            'pageType' => 'Detail',
            'actionSource' => 'glow',
        ]
    ]);
} catch (RequestException $e) {
    echo "Failed to set ZIP";
}

$response = $client->get('...'); //get any other page from Amazon, now it will have proper ZIP

我正在使用很棒的 Guzzle 功能 -

cookies
容器:http://docs.guzzlephp.org/en/stable/request-options.html#cookies 它可以像浏览器一样记住和处理请求之间的 cookie。

在所有进一步的请求中,您应该继续使用这些 cookie,它会为您返回 ZIP 的结果。

当然您可以手动处理 cookie,Guzzle 不是必需的,但可以使事情变得更简单。

© www.soinside.com 2019 - 2024. All rights reserved.