我想使用curl刮擦网上商店的多个页面。我的问题是网址对seo友好-或类似的东西-它们看起来像这样:
https://shopname.com/product-id-title-of-a-product.html
如果我使用了整个URL,那么它可以工作,并且我能够获取要查找的数据,但是该标题中我知道的唯一变量是ID
:
https://shopname.com/product-294
在这种情况下,有没有办法抓取该网址?
其中仅包含ID
的URL会对完整URL进行REDIRECT
。
这是我正在使用的代码:
$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);
答案 0 :(得分:4)
Curl提供选项CURLOPT_FOLLOWLOCATION
。
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
文档指出:
TRUE以跟随服务器作为HTTP标头发送的任何“ Location:”标头(请注意,这是递归的,除非设置了CURLOPT_MAXREDIRS,否则PHP将遵循发送的许多“ Location:”标头)。
因此建议也设置CURLOPT_MAXREDIRS
,例如将执行限制为1重定向:
curl_setopt($curl, CURLOPT_MAXREDIRS, 1);
像这样,您无需任何进一步编程即可自动重定向到原始网址。
答案 1 :(得分:2)
我认为您需要捕获curl对象中的响应标头,该响应标头中应包含重定向URL,然后您可以解析出该响应标头,然后执行第二个curl请求以获取所需的URL。 尝试使用邮递员或失眠之类的应用程序来协助您。