【问题标题】:PHP CURL - scrape seo urls when you only know the idPHP CURL - 当你只知道 id 时抓取 seo url
【发布时间】:2019-01-17 23:22:32
【问题描述】:

我想使用 curl 抓取在线商店的多个页面。我遇到的问题是网址是 seo 友好的 - 或类似的东西 - 它们看起来像这样:

https://shopname.com/product-id-title-of-a-product.html

如果我使用整个网址,它可以工作,并且我能够获得我正在寻找的数据,但我知道该标题中唯一的变量是ID

https://shopname.com/product-294

在这种情况下,有没有办法抓取该网址?

其中只有ID 的网址对完整网址执行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);

【问题讨论】:

  • 可能没有。 ..
  • 如果该商店系统没有提供该 URL 下的内容,也没有重定向到完整的 URL……那么不会。这是你的店吗?
  • 嘿CBroe,该网址确实将我重定向到完整的网址,不,是的,这是我的,但我想学习curl而不是查询数据库:D X_X
  • 嘿 Philipp,我的问题是,如果我插入一个完整的 url,它可以工作,但只有 id 不能,但同时如果我把只有 id 的 url 放进去我的浏览器并按下回车它确实重定向了我 X_X
  • @emma 它的工作原理如我刚刚发布的答案中所述

标签: php curl


【解决方案1】:

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 而无需任何进一步的编程。

【讨论】:

  • CURLOPT_FOLLOWLOCATION 存在已知问题,其解决方案记录在 this stackoverflow question 中。
  • 现在可以了,非常感谢您抽出宝贵时间!现在我只有一个问题,如果我有一个包含 10 个产品 ID 的数组要废弃,是否可以在 foreach 中使用 curl? :-s
  • @emma This stackoverflow answer 应该回答你的问题。
【解决方案2】:

我认为您需要捕获 curl 对象中的响应标头,其中应包含重定向 url,然后您可以将其解析出来并执行第二个 curl 请求以获取您所追求的 url。 尝试使用 postman 或 insomnia 等应用来帮助您完成此过程。

【讨论】:

  • 嘿,没有办法自己编写代码吗? #-o 我的意思是你能告诉我更多关于我应该寻找什么的详细信息吗? X_X
  • 我以前只在 SOAP 中做过,而不是 Curl,所以你需要设置这样的东西才能开始:stackoverflow.com/questions/9183178/…
  • Phillipp Maurer 的答案比我好得多。
  • 感谢您花时间回答我的问题!非常感谢:D
  • 我自己也用肥皂体验过同样的事情,我确信我可以提供这种体验作为一种可能的解决方案,结果证明 Curl 内置了它。:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多