Как спарсить данные с сайта?
Добрый день всем. Прошу помочь. Я только начала учить php хочу спарсить валюту с сайта https://kase.kz/ru/currency/
Вот код который я написала
<?php require_once 'simple_html_dom.php'; $data = file_get_html('https://kase.kz/ru/currency/'); $result = []; if($data->innertext!='' and count($data->find('.currency-tabs__item a span .big'))){ foreach($data->find('.currency-tabs__item a') as $a){ echo '<p>'.$a->plaintext.'</p>'; } } ?> |
<?php require_once 'simple_html_dom.php'; $data = file_get_html('https://kase.kz/ru/currency/'); $result = []; if($data->innertext!='' and count($data->find('.currency-tabs__item a span .big'))){ foreach($data->find('.currency-tabs__item a') as $a){ echo '<p>'.$a->plaintext.'</p>'; } } ?>
вот ссылка на библиотеку
Я хочу вывести только 3 валюты это евро доллар и рубль
не могу просеять результаты. Скажите что я не так делаю потому что выводит все и не массивом а строками
на скриншоте показала что нужно и нужно только валюта (цифры)
Пыталась перевести данные в массив тоже не получается
вот код
require_once 'simple_html_dom.php'; $data = file_get_html('https://kase.kz/ru/currency/'); if($data->innertext!='' and count($data->find('.currency-tabs__item a span .big'))){ foreach($data->find('.currency-tabs__item a') as $a){ $htmlText = "'<p>'.$a->plaintext.'</p>'"; $textArray = explode('<p>', $htmlText); $textArray = array_filter($textArray, 'strlen'); print_r($textArray); } } |
require_once 'simple_html_dom.php'; $data = file_get_html('https://kase.kz/ru/currency/'); if($data->innertext!='' and count($data->find('.currency-tabs__item a span .big'))){ foreach($data->find('.currency-tabs__item a') as $a){ $htmlText = "'<p>'.$a->plaintext.'</p>'"; $textArray = explode('<p>', $htmlText); $textArray = array_filter($textArray, 'strlen'); print_r($textArray); } }
Дополнительно:
Всем спасибо, и только мне, человеку, пытавшемуся научить пользоваться удочкой - нет xd
А не проще парсить напрямую, без цикла?
$usdkzt = $data->find('a[href="#USDKZT"] .currency-round__round .big', 0)->innertext(); |
$usdkzt = $data->find('a[href="#USDKZT"] .currency-round__round .big', 0)->innertext();
- Боже спасибо вам больше. Храни вас бог)
Ответы:
1. Где у вас проверка, что валюта должна быть евро доллар и рубль для вывода?
2. Где вы хотите видеть массив? Вы сами используете plaintext, чтобы вывести строку
3. Еще не до конца понятно, почему вы сначала используете '.currency-tabs__item a span .big', а далее '.currency-tabs__item a'
- подскажите пожалуйста как вывести я не понимаю((((
- AlexandraSvetik, вы и так выводите, нужно только немного разобраться в моих наводящих вопросах
- maksam07, вот сделала проверку нужно теперь как то вывести самый первый результат
<?php require_once 'simple_html_dom.php'; $data = file_get_html('https://kase.kz/ru/currency/'); if($data->innertext!='' and count($data->find('.currency-tabs__item a'))){ foreach($data->find('.currency-tabs__item a') as $a){ if(preg_match("/USD/", $a)) { echo "$a'<br>'"; } // $htmlText = "'<p>'.$a->plaintext.'</p>'"; // $textArray = explode('<p>', $htmlText); // $textArray = array_filter($textArray, 'strlen'); // print_r($textArray); } } ?>
<?php require_once 'simple_html_dom.php'; $data = file_get_html('https://kase.kz/ru/currency/'); if($data->innertext!='' and count($data->find('.currency-tabs__item a'))){ foreach($data->find('.currency-tabs__item a') as $a){ if(preg_match("/USD/", $a)) { echo "$a'<br>'"; } // $htmlText = "'<p>'.$a->plaintext.'</p>'"; // $textArray = explode('<p>', $htmlText); // $textArray = array_filter($textArray, 'strlen'); // print_r($textArray); } } ?>
- AlexandraSvetik, почему используете preg_match, а не stripos ? Т.к. вы только начали учить пхп, вряд ли вы уже хорошо знаете регулярные выражения и можете понимать, как они пишутся
- AlexandraSvetik,
К тому же, можно спарсить именно код валюты отдельно, тогда и stripos не нужен будет
spoiler - maksam07, мне не код а значение надо
- AlexandraSvetik,
мне не код а значение надо
мы говорим об одном и том же, только выражаемся по разному
Если правильно помню, то в цикле можно проверять
if (!in_array($a->href, ['#USDKZT', '#EURKZT']) ) continue; |
if (!in_array($a->href, ['#USDKZT', '#EURKZT']) ) continue;
Как вариант использовать внутренние запросы
<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://kase.kz/charts/currency/history', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727&chart_language_code=ru', CURLOPT_HTTPHEADER => array( 'Accept: */*', 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', 'Cookie: __Host-csrftoken=КУКА; ', 'Referer: https://kase.kz/ru/currency/', 'X-CSRFToken: ТОКЕН', 'X-KL-Ajax-Request: Ajax_Request', 'X-Requested-With: XMLHttpRequest' ), )); $response = curl_exec($curl); curl_close($curl); echo $response; |
<?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => 'https://kase.kz/charts/currency/history', CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS =>'symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727&chart_language_code=ru', CURLOPT_HTTPHEADER => array( 'Accept: */*', 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8', 'Cookie: __Host-csrftoken=КУКА; ', 'Referer: https://kase.kz/ru/currency/', 'X-CSRFToken: ТОКЕН', 'X-KL-Ajax-Request: Ajax_Request', 'X-Requested-With: XMLHttpRequest' ), )); $response = curl_exec($curl); curl_close($curl); echo $response;
Правда непонятно, как часто меняются куки и токен, по идее можно делать запрос на получения куки и токена и проверить, когда она "протухнет". Обычно действуют от 1 до 24 часов.
Payload: symbol=USDKZT_TOM&resolution=D&from=1658040727&to=1658040727
Время указываем текущие (или диапазон). Если указать одинаковыми:
{"c": [486.35], "t": [1658102400], "o": [482.0], "v": [131183750], "h": [487.3], "l": [482.0], "s": "ok"} |
{"c": [486.35], "t": [1658102400], "o": [482.0], "v": [131183750], "h": [487.3], "l": [482.0], "s": "ok"}
- и вам спасибо)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос



Спарсить данные с сайта можно с помощью специальных программ, называемых веб-парсерами или веб-скрейперами. Эти программы позволяют автоматически извлекать информацию с веб-страниц и сохранять ее в удобном формате, например, в виде таблицы или базы данных.
Для начала необходимо определить цель парсинга: какие именно данные вы хотите извлечь с сайта. Это может быть информация о товарах, ценах, новостях, контактные данные и т.д.
Далее необходимо выбрать подходящий инструмент для парсинга. Существует множество бесплатных и платных программ для парсинга данных, например, BeautifulSoup, Scrapy, Selenium и др. Каждый из них имеет свои особенности и возможности, поэтому стоит выбрать тот, который лучше всего подходит под вашу задачу.
После выбора инструмента необходимо написать скрипт, который будет определять структуру веб-страницы и извлекать нужные данные. Для этого часто используются языки программирования Python, JavaScript, PHP и др.
Сам процесс парсинга может быть несколько сложным и требует определенных знаний и навыков. Но с помощью документации по выбранному инструменту и практического опыта можно добиться успеха.
Важно помнить, что при парсинге данных с сайта необходимо соблюдать законы о защите персональных данных и правила пользования сайтом. Некорректное использование парсера может привести к блокировке вашего IP-адреса или даже к юридическим последствиям.
Таким образом, спарсить данные с сайта можно, следуя определенной последовательности действий и используя подходящие инструменты и методы. Важно быть внимательным и осторожным, чтобы извлечь нужную информацию без нарушения законов и правил.