gpt4 book ai didi

PHP Laravel 网络抓取 get_meta_tags

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:15 25 4
gpt4 key购买 nike

我使用 Laravel 5.2 进行网络抓取元标记,但我遇到了 get_meta_tags() 问题。

循环 get_meta_tags() 似乎存在超时和/或 cURL 问题。

以此为例

$urls = ['http://google.com', 'http://yahoo.com', ...];
foreach ($urls as $value) {
$meta = get_meta_tags($value);
}

假设我在 $urls 数组下有 10 个值,然后为 get_meta_tags() 做一个循环。它在性能方面会有任何问题吗?这是因为我在显示的随机 URL 上出现间歇性错误:

get_meta_tags(): php_network_getaddresses: getaddrinfo failed: This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server.

或者有时

cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

但是当我一个接一个地获取元标记时:get_meta_tags('http://google.com') 而不是在循环内,我能够成功检索。

而且由于我正在进行批量网络抓取,因此我必须执行一个以 10 秒为单位的循环。

我什至设置:

ini_set('max_execution_time', 300);
ini_set('default_socket_timeout', 10);

我也在用 Goutte用于网络抓取 DOM(链接、标题、h1)。由于我无法使用 Goutte 获取元标记,因此我改用 get_meta_tags()。但是,如果 Goutte 能够在循环内毫无问题地获取元标记,那就太好了。

最佳答案

你的错误不是你的代码的错 :P

此代码有效:

<?php
$urls = ['http://google.com', 'http://yahoo.com'];
foreach ($urls as $value) {
$meta = get_meta_tags($value);
print_r($meta);
}
?>

你的错误:

  1. 第一个错误:get_meta_tags(): php_network_getaddresses: getaddrinfo failed: 这通常是主机名解析期间的临时错误,意味着本地服务器没有收到来自权威服务器的响应。

这通常发生在您无法连接到您的 DNS(即无法解析网站名称)时。此问题通常是由 Apache/PHP 主机无法联系 DNS 服务器引起的。这可能由于各种其他原因而发生,例如 ISP 问题、配置问题等(其中一些是错误本身所述的临时问题)。

修复此问题:Fix: php_network_getaddresses: getaddrinfo failed: Name or service not known

  1. 第二个错误:cURL 错误 60:SSL 证书问题:无法获取本地颁发者证书(请参阅 http://curl.haxx.se/libcurl/c/libcurl-errors.html)

修复此错误:SSL Error: unable to get local issuer certificate

阅读:

关于PHP Laravel 网络抓取 get_meta_tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34550408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com