为什么刮亚马逊导致文本乱码?

问题描述 投票:-3回答:1

你如何刮掉亚马逊物品清单?我正在使用htmlsimpledom来抓取一个网站,但它正在显示编码文本。

这是我的代码:

<?php
    include('../simple_html_dom.php');
    ini_set('max_execution_time', 300);
    ob_start();


    echo $html = file_get_html('https://www.amazon.com/s/ref=nb_sb_noss?url=search-alias%3Damazon-devices&field-keywords=');


?>

它返回如下所示的文本:

, 0 } mN ! b A / $ 6 iK B n Y Q ;aJZ 9& d:〜exÞZȠgdz} XTۿ10 b-C> -N.-嗨 ! R4PA ^ ޵ ޵ v ǻI X & z d% | ]“1 ====}

php amazon simple-html-dom scrape
1个回答
2
投票

在浏览器的“网络”选项卡中查看响应标头。在Firefox中,我得到了这个:

HTTP/2.0 200 OK
content-type: text/html;charset=UTF-8
server: Server
date: Mon, 10 Sep 2018 23:23:42 GMT
strict-transport-security: max-age=47474747; includeSubDomains; preload
vary: Accept-Encoding,User-Agent
content-encoding: gzip
x-xss-protection: 1;
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-amz-rid: XADMV3PXTF9VCHPYAEYK
x-cache: Miss from cloudfront
via: 1.1 1b6ef5292e517c927f9bce1f146a1445.cloudfront.net (CloudFront)
x-amz-cf-id: X7D6X3dFdd96kKBPVVlDF_L3j0ACcqeqwXLzakZxBXdQOqNpwxi6wg==
X-Firefox-Spdy: h2

特别是,您将对content-encoding: gzip感兴趣。这意味着使用指定的算法压缩内容,您需要解压缩它。

你可以自己做,但尝试使用自动执行此操作的库可能更好。我会尝试Goutte开始,我猜这包含一个减压系统。 (请记住,如果您对JavaScript所呈现的任何内容感兴趣,那么像file_get_contents()和Goutte这样的非JS解决方案将不起作用,并且您将需要一个完整的JS /浏览器驱动程序)。

请注意,在抓取像亚马逊这样的大型网络资源时要小心。他们可能会使用技术手段(如速率限制器)阻止您这样做,或者他们可能会使用合法手段(比如起诉您侵犯版权或违反使用条款政策)。有人可能会说这些行为可能代表一种准垄断行为,或滥用市场地位,但仍然值得了解它们,以避免对您的企业/项目造成风险。

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