为什么刮刮Amazon会导致文本乱码?

时间:2018-09-10 22:58:54

标签: php amazon simple-html-dom scrape

您如何抓取亚马逊商品清单?我正在使用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��YQQ; aJZ ��9&��������� D:���〜e��xÞZ�Ƞ���gd��z��}�xTۿ�1�0b-��C>-。 ��N..-嗨�����������������!�R4PA��^�OX޵�v�II����X�&�z�d%。 |�]“ 1 ====}

2 个答案:

答案 0 :(得分: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 /浏览器驱动程序。)

请注意,在刮刮Amazon之类的大型Web属性时,请务必小心。他们可能使用技术手段(例如速率限制器)阻止您这样做,或者他们可能使用法律手段(例如起诉您侵犯版权或违反使用条款政策)。有人可能会争辩说,这些行为可能代表着一种准垄断行为,或者是滥用市场地位,但是仍然值得意识到这些行为,以避免对您的企业/项目造成风险。

答案 1 :(得分:0)

如果您使用的是Curl,请添加:

curl_setopt($ch, CURLOPT_ACCEPT_ENCODING, "gzip");