Здравствуйте! Помогите пожалуйста!
Нужно вот что:
Есть фраза "destroy shoes"
Нужно подставить её в поисковик, например вот так: somesite.ru/search.php?q=destroy shoes
Потом нужно с помощью пхп открыть эту страницу с результатами как текст. Ну это я знаю - fopen() и так далее
А вот дальше структура примерно такая:
Что открылось:
[HTML]
<html>
<head>
....
</head>
<body>
тут какие-то теги...
<table class="result">
<tr>
<td>А тут результаты поиска - 1</td>
</tr>
</table>
Тут какие-то дивы могут быть
<table class="result">
<tr>
<td>А тут результаты поиска - 2</td>
</tr>
</table>
Другие элементы
<table class="result">
<tr>
<td>А тут результаты поиска - 3</td>
</tr>
</table>
</body>
</html>
[/HTML]
Нужно просканить этот отдаваемый исходный код и:
- выделить каждый результат поиска, то есть из всего выцарапать кусок:
[HTML]
<table class="result">
<tr>
<td>А тут результаты поиска - 1</td>
</tr>
</table>
[/HTML]
Соотв. остальные результаты тоже, короче опираясь на таблицы, у которых класс = result
Выцарапать надо как есть, то есть вместе с тэгами table
текст между тэгами
Тут проще всего копать в сторону регулярных выражений
Примерно так: preg_match("!<table class=\"result\">/(.*?)<\/table>!", $file_text, $matches) - навскидку точнее не скажу, надо тестить, в уме я регэкспы плохо пишу. $file_text - текст, который мы парсим, $matches - массив, в котором будет все нужное.
Примерно так: preg_match("!<table class=\"result\">/(.*?)<\/table>!", $file_text, $matches) - навскидку точнее не скажу, надо тестить, в уме я регэкспы плохо пишу. $file_text - текст, который мы парсим, $matches - массив, в котором будет все нужное.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
К сожалению не ищет, выводит только вот это:Хыиуду писал(а):Тут проще всего копать в сторону регулярных выражений
Примерно так: preg_match("!<table class=\"result\">/(.*?)<\/table>!", $file_text, $matches) - навскидку точнее не скажу, надо тестить, в уме я регэкспы плохо пишу. $file_text - текст, который мы парсим, $matches - массив, в котором будет все нужное.
Array
(
[0] => Array
(
)
)
Array
(
[0] => Array
(
)
)
Array
(
[0] => Array
(
)
)
Array
(
[0] => Array
(
)
)
Ещё пробовал вариант
Код: Выделить всё
preg_match_all('~<table class=\"result\">\s*<tr>\s*<td>[^\<]+<\/td>\s*<\/tr>\s*<\/table>~is', $contents, $out);
Проверил. Проблема была в том, что в исходном тексте присутствуют непредвиденные переносы строк 
$a=str_replace("\n", "", $file_text);
А теперь учтем, что из соображений удобочитаемости текст еще и отформатирован пробелами, так что учитываем еще их.
preg_match_all('/<table class="result"> *<tr> *<td>(.*?)<\/td> *<\/tr> *<\/table>/', $a, $matches);
Если форматирование текста происходило еще и с помощью табуляции, то каждое вхождение " *" надо заменить на [ \t]*

$a=str_replace("\n", "", $file_text);
А теперь учтем, что из соображений удобочитаемости текст еще и отформатирован пробелами, так что учитываем еще их.
preg_match_all('/<table class="result"> *<tr> *<td>(.*?)<\/td> *<\/tr> *<\/table>/', $a, $matches);
Если форматирование текста происходило еще и с помощью табуляции, то каждое вхождение " *" надо заменить на [ \t]*
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.