@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);
  • Вопрос задан
  • 119 просмотров
Пригласить эксперта
Ответы на вопрос 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); совсем не обязательно!
На случай если далее скрипт не предполагает выполнения!
Лишние такты для освобождения памяти.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы