2015-12-31 199 views
1

我使用Laravel 5.2進行網頁抓取meta標籤,但我遇到get_meta_tags()問題。PHP Laravel網頁抓取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()。在性能方面會有什麼問題嗎?這是因爲我得到隨機的網址間歇性錯誤,顯示:

get_meta_tags():php_network_getaddresses:的getaddrinfo失敗:這是 通常是主機名解析過程中暫時的錯誤,意味着 本地服務器沒有收到來自權威 服務器的響應。

或有時

捲曲錯誤60:SSL證書問題:無法獲取本地發行人 證書(見http://curl.haxx.se/libcurl/c/libcurl-errors.html

但是,當我得到的meta標籤一個逐一個: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有能力在循環內沒有任何問題的情況下獲得元標籤,那就太棒了。

+0

到底爲什麼不能GOUTTE得到meta標籤,因爲你是陳述? – codedge

回答

1

你的錯誤是不是你的代碼的錯: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: This is usually a temporary error during hostname resolution and means that the local server did not receive a response from an authoritative server.

這通常發生當你無法連接到你的DNS(即不是能夠解析網站的名稱)。此問題通常是由Apache/PHP主機無法聯繫DNS服務器引起的。這可能會發生各種其他原因,如ISP問題,配置問題等(其中一些是臨時性問題,如錯誤本身所述)。

,固定爲這樣:Fix: php_network_getaddresses: getaddrinfo failed: Name or service not known

  • 第二誤差:cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)
  • 定爲這錯誤:SSL Error: unable to get local issuer certificate

    閱讀: