@Mayuko

Как правильно спарсить на phpQuery и разложить все по полочкам?

Как на phpQuery правильно спарсить сайт так чтобы все данные хранились в json документе следующим образом:
id_region:"1", "city": "Адыгейск" , "street": "Ленинградская улица" id_region:"1", "city": "Майкоп" , "street": "Ленинградская улица"и так все данные по id_region 1, потом вслед за ним идёт допустим id_region:"2", "city": "Агидель" , "street": "Активистов улица" и так далее. Сейчас я понимаю как спарсить все в кучу, но не понимаю как спарсить все по порядку, чтобы у меня в файле хранились данные в таком формате как я описал выше. Мне это все нужно для того чтобы также по порядку все добавить в базу данных mysql.

В данном коде формируется json так "city":абсолютно все города, "street":абсолютно все улицы подряд.

$url = 'https://kladr-rf.ru/';
$file = file_get_contents($url);

$id_region_files = file_get_contents($url);
$document = phpQuery::newDocument($id_region_files);
$id_region_find = $document->find('.badge badge-info')->text();

for($i = 1; $i < 5; $i++) {  
  $url_region = 'https://kladr-rf.ru/0'.$i.'/000/'; 
  $region_files = file_get_contents($url_region);
  $document = phpQuery::newDocument($region_files);
  $needle = "Город";
  $region_find = $document->find('.span4 a:contains("'.$needle.'")')->text();
  $region_next = $document->find('.span4 a:contains("'.$needle.'")')->next()->attr('href');

  $array_cities[] = $region_find;
  
  for($j = 1; $j < 5; $j++) { 
    $url = 'https://kladr-rf.ru/0'.$i.'/000/00'.$j.'/000/';
    $files = file_get_contents($url);
    $document = phpQuery::newDocument($files);
    $street_find = $document->find('.span4')->text();
    $array_streets[] = $street_find; 
    
  }

}

$result_city = array_unique($array_cities);
$result_streets = array_unique($array_streets);
print_r($result_streets);

$file = file_get_contents('data.json');
$array_kldr = json_decode($file,TRUE);
unset($file);
$array_kldr = [1
'city'=>$result_city,
'streets'=>$result_streets,
];

file_put_contents('data.json',json_encode($array_kldr));
unset($array_kldr);
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
IgorPI
@IgorPI
Для того что бы все было по полочками.

Создайте объект.

Например:

$Street = new stdClass();
$Street->street_name = "Генерала Лизюкова";
$Street->street_type = "улица";

$City = new stdClass();
$City->city_name = "Воронеж"

$MyObjectItem = new stdClass();
$MyObjectItem->street = $Street;
$MyObjectItem->city = $City;

$MyObject = new stdClass();

$MyObject->count = 1;
$MyObject->items = []; // Сюда положим объекты
$MyObject->items[] = $MyObjectItem;

file_put_contents('data.json', json_encode($MyObject));


И да, вот это unset($array_kldr); совсем не обязательно!
На случай если далее скрипт не предполагает выполнения!
Лишние такты для освобождения памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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