2015-12-24 5 views
5

Я новичок в php, и я сделал страницу scraper.php, где вы можете получить информацию о погоде от «http://www.weather-forecast.com» для любого города.
Я следовал инструктор, и я не могу понять, почему мой код возвращает пустую страницу, когда ее должны вернуться лишь краткий 3 дня гнозироватьscraper php возвращает пустую страницу

любом случае ... вот мой код

<?php 
$city=$_GET['city']; 
$city=str_replace(" ","",$city); 
$contents=file_get_contents("http://www.weather-forecast.com/locations/".$city."/forecasts/latest"); 
preg_match('/3 Day Weather Forest Summary:<\/b> 
<span class="phrase">(.*?)</span>',$contents, $matches); 
echo $matches[1]; 
?> 
+0

Вы пробовали отладить его? что такое $ city? что вы получаете в $ content? etc – pvg

+0

blank может означать ошибки синтаксиса http://php.net/manual/en/function.error-reporting.php –

ответ

-1

Try следующий вопрос:

how-can-i-emulate-a-get-request-exactly-like-a-web-browser,

, чтобы получить то, что вы ищете.

Объяснение:

file_get_contents() даст вам статическое содержимое страницы.

Содержимое, которое вы фактически видите в своем браузере, генерируется HTML/CSS/JS, и не будет видно с помощью функции file_get_contents().

Когда я попытался просмотреть непосредственно из браузера, к этому URL

(например: new york)

и открывшейся странице в качестве источника поиска: «3 дня Погода Лесной Резюме:».

У меня не было никаких результатов, поэтому я предполагаю, что это была ваша проблема.

0

Это не пусто, а ошибка в вашем скрипте. Вероятно, это пусто, потому что вы отключите отчет об ошибках.

От этой линии:

preg_match('/3 Day Weather Forest Summary:<\/b><span class="phrase">(.*?)</span>',$contents, $matches); 

Вы забыли, чтобы избежать / на </span> (она должна быть <\/span>); и окончательный разделитель / для preg_match. (Там есть опечатка, это должен быть «Прогноз» не Лес.)

Но даже вы исправляете эту ошибку, вы не получите то, что ищете, глядя на исходный код html из прогноза погоды, вы пропустите <span class="read-more-small"><span class="read-more-content"> после <\/b>.

Таким образом, это должно быть так:

<?php 
$city=$_GET['city']; 
$city=str_replace(" ","",$city); 
$contents=file_get_contents("http://www.weather-forecast.com/locations/".$city."/forecasts/latest"); 
preg_match('/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class="phrase">(.*?)<\/span>/',$contents, $matches); 
echo $matches[1]; 
?> 


Или

Вы можете использовать preg_match_all, чтобы получить все три Прогноз погоды Сводка (1 - 3 дня, 4 - 7 день, и 7 - 10 дней), заменив всю вашу линию preg_match на:

preg_match_all('/<span class="phrase">(.*?)<\/span>/',$contents, $matches); 

и эхо ваших данных:

$matches[0][0] за 1-3 дня,
$matches[0][1] на 4-7 дня,
$matches[0][2] на 7-10 день.

Смежные вопросы