@ganbatte

Хочу парсить сайт, получаю сайт с помощью (file_get_contents), узнаю позицию уникальный код строки с помощью (strpos), но не работает?

Хочу парсить с этого сайта
Вот мой код, пока недоделанный так как не работает strpos. Но некоторые данные находит, а нужные не находит.
<?php
function file_get_contents_utf8($fn) {
     $content = file_get_contents($fn);
      return mb_convert_encoding($content, 'UTF-8',
          mb_detect_encoding($content, 'UTF-8, ISO-8859-1', true));
}


     $http=file_get_contents_utf8('http://ykuthydromet.ru/mobil.html');
$findme   = 24261;
     $pos = strpos($http,$findme);

     // Заметьте, что используется ===.  Использование == не даст верного
     // результата, так как 'a' в нулевой позиции.
     if ($pos === false) {
         echo "Строка '$findme' не найдена в строке ";
     } else {
         echo "Строка '$findme' найдена в строке '";
         echo " в позиции $pos";
     }
?>

Еще с кодировкой почему то не получилось, но главное находит нужные данные.

Я хочу найти из этого результата (file_get_contents_utf8('ykuthydromet.ru/mobil.html');) слово puk24261. Потом узнать его позицию, потом обрезать c (substr).

Почему не находит ?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Просто на этой странице нет строки '24261'.
Данные о погоде добавляются на страницу скриптом ykuthydromet.ru/images/pogoda02.js
Ответ написан
Комментировать
kawabanga
@kawabanga
А нормальных способов узнать погоду прям вот совсем нет? Тот же яндекс неплохо отдает погоду без больших танцев.

Научитесь работать с DOM, а не со строкой. На habre полно статей, гуглите dom парсер php xpath

1) Используйте xpath для поиска тега , браузер сам предложил вот такой вариант. вы же можете ограничиться последними элементами
/html/body/table/tbody/tr[5]/td/div[@class='karta']/b/b/div[@class='nas_puk24261']

2) чтобы узнать температуру, я бы забрал строчку из первого пункта, потом сделал explode, и перебором нашел элемент с температурой. И уже его распарсил бы.

UPD, не заметил что подгрузка элементов позже происходит.
Поэтому как написали в другом ответе, вы можете работать с файлом ykuthydromet.ru/images/pogoda02.js

Алгоритм для этого файла:
1) делаете explode по строке 'text = '
2) ищете элемент с упоминанием нужного слова через foreach
3а) забираете по регулярке вот этот элемент '>{число, возможно с минусом}°'
3б) забираете по xpath в dom элементе.

Советую разобраться как раз с 3б, это будет эффективнее в будущем.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы