php 为什么抓取Amazon会导致文本乱码?

x6492ojm  于 2023-01-04  发布在  PHP
关注(0)|答案(2)|浏览(210)

如何刮取亚马逊商品列表?我正在使用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=');

?>

它返回如下所示的文本:
(2)、(3)、(4)、(0)、(mN)、(b)、(A)/($)、(6)、(k)、(b)、(n)、(y)、(q);阿京证9号和阿京证 * D号:************| "1 ====}

l7mqbcuq

l7mqbcuq1#

看看你浏览器的网络标签中的响应头,在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/浏览器驱动程序)。

  • 请注意,在抓取像亚马逊这样的大型网络资产时,值得小心。他们可能会使用技术手段(如费率限制机构)阻止您这样做,否则他们可能会使用法律的手段(比如起诉你侵犯版权或违反使用条款政策)。有人可能会说这些行为可能代表了准垄断行为,或滥用市场地位,但仍然值得注意,以避免给企业/项目带来风险 *。
bxgwgixi

bxgwgixi2#

如果您使用 curl 添加:

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

相关问题