Intereting Posts
PHP mySQL – вставить новую запись в таблицу с автоматическим приращением на первичный ключ Представление JQuery Keep Keeps Refreshing Создание следующего значения последовательности вручную в Doctrine 2 Хорошая практика при использовании php включает в себя заголовки, навигацию и другие элементы? mysqldump работает на локальном, но не на сервере godaddy Подключение базы данных MySQL MySQL Создание предварительного просмотра шрифта PHPMailer, Fatal error: вызов функции-члена Send () для не-объекта Как установить / включить расширения intl и xsl после установки PHP 7 Проблема с symfony 1.49 и MySQL 5.5.8 Символическая доктрина Проверьте, приобрел ли клиент определенные продукты в WooCommerce как я могу использовать imagick в php? (изменение размера и урожая) php shell exec зависает при использовании wkhtmltopdf Использование GD для изменения цвета одной цветовой формы на прозрачном фоне при сохранении прозрачности

PHP найти и получить значение на основе другого из HTML-файла проанализированного файла

Я использую PHP Simple HTML DOM Parser для своего проекта.

Я пытаюсь найти конкретные данные и повторить их после того, как я проанализирую мой .php-файл с веб-сайта URL, который содержит данные внутри элемента таблицы HTML, например:

<table class="example"> <tbody> <tr> <td> Heading #1 <p>Description of heading #1 here ...</p> </td> <td>Example of data #1</td> </tr> <tr> <td> Heading #2 <p>Description of heading #2 here ...</p> </td> <td>Example of data #2</td> </tr> </tbody> </table> 

Мой вопрос:

Как я могу получить значение «Пример данных № 1» из второго элемента ячейки TD в первом элементе строки TR, зная, что первая ячейка TD в той же строке TR содержит значение «Заголовок №1 …» из этого типа Таблица?

Я проанализировал URL, теперь мне нужно найти значение, основанное на другом значении, которое рядом с ним.

Должен ли я использовать некоторое регулярное выражение и сделать для этого некоторый шаблон? strpos () и массив?

Вам нужно будет предоставить подразделениям таблиц идентификатор для JavaScript, чтобы иметь возможность получать данные для отправки и помещать их в скрытые входы с именами и идентификаторами, чтобы PHP получал их с помощью POST.

 <script language="javascript"> function transfer_data(){ documentGetElementById('ex1_hidden').value = documentGetElementById('ex1').innerHTML; documentGetElementById('ex2_hidden').value = documentGetElementById('ex2').innerHTML; submit(); } </script> <table class="example"> <tbody> <tr> <td id="hdg1"> Heading #1 <p>Description of heading #1 here ...</p> </td> <td id="ex1">Example of data #1</td> </tr> <tr> <td> Heading #2 <p>Description of heading #2 here ...</p> </td> <td id="ex2">Example of data #2</td> </tr> </tbody> </table> 

В вашей форме, которая отправляется туда, куда вы хотите, используя method="post" вам понадобится:

  <input type="hidden" name="ex1_hidden" id="ex1_hidden" /> <input type="hidden" name="ex2_hidden" id="ex2_hidden" /> <input type="button" value="Submit" onClick="transfer_data()" /> 

В PHP вы получите их с помощью $_POST['ex1_hidden'] и $_POST['ex2_hidden'] (не забудьте очистить поданные данные).

Это не метод, который подходит для защищенных данных.

Вы можете добавить идентификатор в заголовок и сделать его условным в своем скрипте:

 if(documentGetElementById('hdg1').innerHTML == "Heading #1"){ documentGetElementById('ex1_hidden').value = documentGetElementById('ex1').innerHTML; } 

Возможно, вам придется обрезать пробел с заголовка, возможно, используя что-то вроде

  var str=documentGetElementById('hdg1').innerHTML.replace(/^\s+|\s+$/g,''); 

Credit @Paul о том, как мне удалить пробел при захвате текста с помощью jQuery?

Много полезных идей по другим способам здесь Как получить значение ячейки таблицы с помощью jQuery?

Если это очищенные данные с другого сайта, на котором у вас нет контроля вообще, но который у вас уже есть в переменной PHP, вы можете explode() его на <td> и определить, какие позиции в массиве содержат нужные вам данные , Ссылка: http://php.net/manual/en/function.explode.php

Это то, что я думаю, что вы действительно ищете – может быть хорошей идеей спросить владельца сайта, если он в порядке, но это зависит от вас. Вы были на правильном пути с strpos(); и массивы (проверены с использованием таблицы):

  // only works if fopen is allowed on the site's server and in PHP5+ $handle = fopen("http://websiteyouwanttoscrape.com/file.html", "r"); $contents = stream_get_contents($handle); $contents_array = array(); $bit_i_want = array(); // give yourself a chance $contents = htmlspecialchars($contents); // swap these if you don't use htmlspecialchars(); $contents_array = explode('&lt;td&gt;',$contents); //$contents_array = explode('<td>',$contents); $counter = 0; while($counter < count($contents_array)){ if(strpos($contents_array[$counter], 'Heading #1') > 0 ){ // swap these if you don't use htmlspecialchars(); $bit_i_want = explode('&lt;/td&gt;',$contents_array[$counter+1]); //$bit_i_want = explode('</td>',$contents_array[$counter+1]); echo $bit_i_want[0] . '<br />'; // uncomment break; to stop the loop if you don't // want to look for any more instances of "Heading #1" if there were any //break; } $counter++; } fclose($handle); //close the file