【发布时间】:2021-08-11 10:28:35
【问题描述】:
我用 PHP cURL 做了一个简单的网络爬虫,它应该从亚马逊上抓取关键字 samsung 已被搜索到的特定页面的所有图像。
代码如下:
$curl = curl_init(); // $curl is going to be data type curl resource
$search_string = "samsung";
$url = "https://www.amazon.com/s?k$search_string";
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // ssl
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // storing in variable
$result = curl_exec($curl);
preg_match_all("!https://m.media-amazon.com/images/I/[^\s]*?._AC_UL320_.jpg!", $result, $matches);
print_r($matches);
curl_close($curl);
但现在我得到的是空数组:
Array ( [0] => Array ( ) )
我不知道为什么会这样,所以如果你知道出了什么问题或者我该如何处理,请告诉我,我非常感谢你们的任何想法......
提前致谢。
注意,我指定了[^\s]*? 正则表达式而不是图像名称来加载网页上所有可用的图像。
更新 #1:
curl --head https://www.amazon.com/s?k=samsung的结果
HTTP/1.1 503 Service Unavailable
Content-Type: text/html
Content-Length: 2671
Connection: keep-alive
Server: Server
Date: Tue, 15 Jun 2021 20:59:38 GMT
x-amz-rid: 9BVX8KQMWJ4QDJ75ETYV
Vary: Content-Type,Accept-Encoding,X-Amzn-CDN-Cache,X-Amzn-AX-Treatment,User-Agent
Last-Modified: Fri, 14 May 2021 19:08:48 GMT
ETag: "a6f-5c24ef9383000"
Accept-Ranges: bytes
Strict-Transport-Security: max-age=47474747; includeSubDomains; preload
Permissions-Policy: interest-cohort=()
X-Cache: Error from cloudfront
Via: 1.1 5345148f0ba8ae3c67b69d035acdbfc5.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: AMS50-C1
X-Amz-Cf-Id: AHdq2-QLEtCE4WvXZIEh_P75D8hCrHP09EAkNqBer5VBS-pI-blj1w==
【问题讨论】:
-
对您的请求的响应很可能是重定向或重写,并且不包括您要查找的内容。
-
@DonR 那么我该怎么做才能解决这个问题
-
您必须像浏览器一样处理重定向并请求新资源。
-
@DonR 你能解释更多或者给我一个例子的链接吗
-
第 1 步:打开一个终端/cmd,然后只需 运行 curl 即可查看它为您的 URL 返回的内容。但您可能想先修正 URL 中的拼写错误(输入
echo $url;看看有什么问题)。
标签: php curl web-scraping web-crawler amazon