【问题标题】:PHP - manage curl outputPHP - 管理 curl 输出
【发布时间】:2020-07-13 10:14:41
【问题描述】:

根据我的最后一个问题,我向网站发送了请求,它显示了输出。但是,输出显示了完整的网站。我只想在 curl 输出中获取一些数据,例如 link

$url = 'http://site1.com/index.php';
$data = ["send" => "Test"];
$ch = curl_init($url);

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);
var_dump($response);

这段代码告诉我我想要什么,但输出包含完整的网站。我只想获取一些数据并显示在输出中。

【问题讨论】:

  • 你得到什么回应?
  • “我只想获取一些数据”是什么意思?你在哪里过滤输出?
  • @vivek_23 回复显示包含数据的网站。我只想要数据。网站未完全显示在屏幕上
  • 如果网站是您的,您可以创建单独的端点,该端点将返回,无论您需要什么(例如:site1.com/index-curl.php)如果网站不是您的,您将不得不使用网络抓取脚本过滤掉响应。下面的链接可能对你写爬虫有帮助stackoverflow.com/questions/9813273/web-scraping-in-php
  • @NicoHaase 我不知道如何过滤。我想要的数据在某个 html 类中。

标签: php curl


【解决方案1】:

您可以使用preg_match_all 和精心构造的模式。您的代码的此修改版本应为您提供您检索的 HTML 中所有图像 url 的列表:

        $url = 'http://site1.com/index.php';
        $data = ["send" => "Test"];
        $ch = curl_init($url);

        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $response = curl_exec($ch);
        curl_close($ch);


        $matches = NULL;
        $pattern = '/<img[^>]+src=\"([^"]+)"[^>]*>/';
        $img_count = preg_match_all($pattern, $response, $matches);

        var_dump($matches[1]);

如果您想获取所有链接,可以将$pattern 更改为:

        $pattern = '/<a[^>]+href=\"([^"]+)"[^>]*>/';

我已经在一个看起来像这样的 html 文件上测试了这段代码:

<html>
<body>
<div><img src="WANT-THIS"></div>
</body>
</html>

输出是这样的:

array(1) {
  [0]=>
  string(9) "WANT-THIS"
}

编辑 2: 为了回答来自 OP 的其他问题,我还尝试了这个 html 文件上的脚本:

<html>
<body>
<div1>CODE</div><div2>CODE</div><div3>CODE</div><div4>CODE</div><div5>CODE</div><div6>CODE</div><img src="IMAGE">
</body>
</html>

它会产生这样的结果:

array(1) {
  [0]=>
  string(5) "IMAGE"
}

如果这不能解决您的问题,您需要提供更多详细信息——您正在获取的示例 url、您想要搜索的一些 HTML,或者关于您可能如何知道的额外详细信息 您要抓取 HTML 中的哪个图像——它有一些特殊的 id 吗?它总是第一个图像吗?第二张图?是否有任何特征可以让我们知道要抓取哪个图像?

【讨论】:

  • 我不建议对 HTML 响应进行正则表达式匹配。
  • 为什么不呢?它为您提供页面中的图像列表。
  • @vivek_23 不确定这篇冗长而道貌岸然的帖子一开始就值得如此多的支持。其次,我不是在写“解析器”——这里的目标非常有限。
  • 您不应为此使用正则表达式,因为无论目标有多大或多小,这都是一种不好的做法。此外,在您的正则表达式中,您希望 src 在双引号下,它也可能在单引号下。另外,如果我没记错的话,它也可能与data-src 属性发生冲突。
  • @vivek_23 所以你宁愿没有解决方案,也不要选择可以调整工作的解决方案?
猜你喜欢
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多