我想用curl来抓取网上商店的多个页面。我遇到的问题是网址对 seo 友好 - 或类似的东西 - 它们看起来像这样:
https://shopname.com/product-id-title-of-a-product.html
如果我使用整个 url,它可以工作,并且我能够获得我正在寻找的数据,但我知道该标题中唯一知道的变量是ID
:
https://shopname.com/product-294
在这种情况下,有没有办法抓取该网址?
仅包含ID
的 url 会REDIRECT
到完整的 url。
这是我正在使用的代码:
$curl = curl_init();
$url = 'https://shopname.com/product-294';
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
Curl 提供了选项CURLOPT_FOLLOWLOCATION
.
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
文档指出:
如果为 TRUE,则遵循服务器作为 HTTP 标头的一部分发送的任何 "Location: " 标头(请注意,这是递归的,PHP 将遵循发送的尽可能多的 "Location: " 标头,除非设置了CURLOPT_MAXREDIRS(。
因此,建议同时设置CURLOPT_MAXREDIRS
,例如将执行限制为 1 个重定向:
curl_setopt($curl, CURLOPT_MAXREDIRS, 1);
像这样,您应该被自动重定向到原始URL,而无需任何进一步编程。
我认为您需要捕获 curl 对象中的响应标头,其中应包含重定向 URL,然后您可以解析它并执行第二个 curl 请求以获取您想要的 url。 尝试使用邮递员或失眠等应用程序来帮助您完成此过程。