4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160

Поиск информации по странице

12.09.2010, 23:52. Показов 7524. Ответов 61
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите, пожалуйста, как реализовать поиск нужной мне информации на сайте и занесение в базу данных

Код получаю $cod = file_get_contents('http://site.com/pages/hands');
HTML5
1
2
3
4
5
<td class="tip"><img class="itemicon" src="http://site.com/sites/images/icons/item/hands.png">
<div class="itemname">hands</div>
<div class="itemtype">Medium</div>
<div class="itemdata">487</div>
</td>
Как мне по фиолетовым данным найти красные данные, используя регулярные выражения?
Или подскажите документацию по регулярным выражениям на русском языке.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2010, 23:52
Ответы с готовыми решениями:

Ввод информации в структуру и поиск элемента по информации, находящейся в этом же элементе
В сервис-центре хранятся квитанции о сданной в ремонт аппаратуре. Каждая квитанция содержит следующую информацию: наименование группы...

Запись в текстовый файл информации о студентах, поиск информации, сортировка
Здравствуйте помогите пожалуйста:( 3.1 Для записи в текстовый файл информации о студентах Вашей группы создать КФ WRITE_FD.BAT со...

получения информации о странице
возник такой вопрос, есть функция page _ data для получения информации о странице. &lt;meta name=&quot;keywords&quot;...

61
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
27.09.2010, 23:51  [ТС]
Студворк — интернет-сервис помощи студентам
Так выглядит переделанный код:
PHP
1
2
3
4
5
6
7
8
<?php
      $cod = file_get_contents('http://lorebook.lotro.com/wiki/Armour:Harbinger%27s_Cloak');
      $classes = array('itembind','itemtype','itemarmor','itemdurability','itemsturdiness','itemrequirement');
      $regexp = "#<div class=\"$name[^>]*>(.+?)</div>#si";
      foreach ($classes as $name)
      if (preg_match($regexp, $cod, $match)) $result[$name] = $match[1];
      $sql = "INSERT INO en_cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".implode("','", array_values($result))."');"
?>
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
27.09.2010, 23:55
Сорри. Проблема интерполяции строки.
Правильно будет так:

PHP
1
$regexp = "#<div class=\"{$name}[^>]*>(.+?)</div>#si";
Добавлено через 1 минуту
PHP находил после $name квадратную скобочку, и думал, что мы будем указывать элемент массива.

Добавлено через 3 минуты
Цитата Сообщение от Curse Посмотреть сообщение
PHP
1
2
3
      $regexp = "#<div class=\"$name[^>]*>(.+?)</div>#si";
         foreach ($classes as $name)
         if (preg_match($regexp, $cod, $match)) $result[$name] = $match[1];
Так работать не будет. Но будет так:

PHP
1
2
3
4
5
   foreach ($classes as $name)
   {
      $regexp = "#<div class=\"$name[^>]*>(.+?)</div>#si";
      if (preg_match($regexp, $cod, $match)) $result[$name] = $match[1];
   }
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
27.09.2010, 23:56  [ТС]
Большое спасибо
Да, да... понял... переменная еще не объявлена была
0
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
12.10.2010, 23:16  [ТС]
У меня есть таблица в которой 25 столбцов. Подскажите, пожалуйста, как можно записать 5 имеющихся столбцов со значениями, а остальным присвоить значения по умолчанию в БД?

пользуюсь командой
PHP
1
mysql_query("INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("','", array_values($result)))."');");
Получается запрос
SQL
1
INSERT INTO En_Cloaks (`Item_Icon`, `Item_Name`, `Bindable`, `Equipment_Slot`, `Armour_Value`) VALUES('http://localhost/eq_cloak_anniversary_fellowship.png\',\'Harbinger\'s Cloak\',\'Bind on Acquire\',\'Light Armour \',\'56');
PHP ругается, считает данные одной строкой
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
13.10.2010, 06:40
Curse, Экранируйте одинарные кавычки...
PHP
1
mysql_query("INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("\',\'", array_values($result)))."');");
1
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
13.10.2010, 10:09
PHP
1
2
3
4
5
6
7
    function mysql_id($s) { return "`$s`"; }
    
    mysql_query(sprintf(
        'INSERT INTO En_Cloaks (%s) VALUES (%s)',
        implode(', ', array_map('mysql_id', array_keys($result))),
        implode(', ', array_map('mysql_real_escape_string', array_values($result)))
    ));
1
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
14.10.2010, 21:39
ostgals, я считаю это громоздким и не нужным... Но это дело вкуса.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
15.10.2010, 10:12
Цитата Сообщение от romchiksoad Посмотреть сообщение
ostgals, я считаю это громоздким и не нужным... Но это дело вкуса.
Я бы согласился, но ваш код работать не будет. В этом легко убедиться, запустив такой пример:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
    $result = array(
        'one' => 'one thing',
        'two' => 'another thing'
    );
    
    mysql_connect('localhost', 'root', '');
    
    echo "INSERT INTO En_Cloaks (`" . implode("`, `",array_keys($result))."`) VALUES('".mysql_real_escape_string(implode("\',\'", array_values($result)))."');";
    
?>
Выведет следующую белиберду:
INSERT INTO En_Cloaks (`one`, `two`) VALUES('one thing\\\',\\\'another thing');
0
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
17.10.2010, 03:28  [ТС]
Как нужно изменить выражения, если требуется поиск в строке вида:
PHP
1
<div class="iteme">+22 Param1</div><div class="iteme">+102 Param2</div><div class="iteme">+22 Param3</div>
Код:
PHP
1
2
3
'Param1' => '#<div class="iteme">+(.+?) Param1</div>#si',
'Param2' => '#<div class="iteme">+(.+?) Param2</div>#si', 
'Param3' => '#<div class="iteme">+(.+?) Param3</div>#si',
Выдает:
Array
(
[Param2] => +22 Param1
+102
[Param1] => +22
[Param3] => +22 Param1
+102 Param2
+22
)
Нужны только цифры
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
17.10.2010, 22:34
PHP
1
2
3
'Param1' => '#<div class="iteme">\+(\d+) Param1</div>#si',
'Param2' => '#<div class="iteme">\+(\d+) Param2</div>#si', 
'Param3' => '#<div class="iteme">\+(\d+) Param3</div>#si',
1
 Аватар для nubo
113 / 70 / 2
Регистрация: 31.07.2010
Сообщений: 337
18.10.2010, 14:45
ostgals,
Выведет следующую белиберду:
INSERT INTO En_Cloaks (`one`, `two`) VALUES('one thing\\\',\\\'another thing');
Ну во первых, у Вас включены магические кавычки. Что уже очень плохо.
А во вторых так смотреть нельзя. Эта функция для транспортировки данных в базу, а не для вывода в поток. В базу попадают только значимые слэши, экранирующих там не будет.

PS Упс... Не туда посмотрел. Таки да, именно ostgals прав. Лишний раз экранировать не след.
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
19.10.2010, 23:49  [ТС]
Подскажите, как можно заменить "/sub/link", если эта информация постоянно меняется и не требуется
<div class="myitem"><a href="/sub/link">(.+?)</a>

Спасибо, ostgals
Цитата Сообщение от ostgals Посмотреть сообщение
PHP
1
2
3
'Param1' => '#<div class="iteme">\+(\d+) Param1</div>#si',
'Param2' => '#<div class="iteme">\+(\d+) Param2</div>#si', 
'Param3' => '#<div class="iteme">\+(\d+) Param3</div>#si',
Как я понял можно изменить выражение на '#<div class="iteme">\+(\d+) (Param1|Param2|Param3)</div>#si' , вот только не понял как присвоить разные значения определенным элементам массива. Или в данном случае это не применимо?
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
20.10.2010, 10:36
Цитата Сообщение от Curse Посмотреть сообщение
Как я понял можно изменить выражение на '#<div class="iteme">\+(\d+) (Param1|Param2|Param3)</div>#si' , вот только не понял как присвоить разные значения определенным элементам массива. Или в данном случае это не применимо?
PHP
1
2
3
4
5
6
7
8
9
10
<?php
 
    $regexp = '#<div class="iteme">\+(\d+) (Param1|Param2|Param3)</div>#si';
    $text   = '<div class="iteme">+10 Param1</div><div class="iteme">+20 Param2</div><div class="iteme">+30 Param3</div>';
    
    preg_match_all($regexp, $text, $matches);
    
    foreach ($matches[2] as $i => $param) $params[$param] = $matches[1][$i];
    
    echo '<pre>'.print_r($params, true).'</pre>';
Цитата Сообщение от Curse Посмотреть сообщение
Подскажите, как можно заменить "/sub/link", если эта информация постоянно меняется и не требуется
<div class="myitem"><a href="/sub/link">(.+?)</a>
Не понял вопроса.
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
21.10.2010, 06:45  [ТС]
Например
HTML5
1
<div class="myitem"><a href="[a-zA-Z0-9]">(.+?)</a>
, не работает
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
21.10.2010, 10:11
Понял.

PHP
1
$regexp = '#<div class="myitem"><a [^>]+>(.+?)</a>#si';
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
25.10.2010, 06:54  [ТС]
а можно ли используя выражение
PHP
1
2
3
4
5
6
7
8
<?php
$cod = file_get_contents('http://localhost/Cloak_of_the_West-tower_%28Level_63%29');
$regexps3 = '#<div class="items[a-z]"><a [^>]+>(.+?)</a></div>#si';
preg_match_all($regexps3, $cod, $match);
?>
<pre>
<?php print_r($match); ?>
</pre>
Обычный массив, а не массив в массиве?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Array
(
    [0] => Array
        (
            [0] => Items
            [1] => Item1
            [2] => Item2
            [3] => Item3
            [4] => Item4
            [5] => Item5
            [6] => Item6
            [7] => Item7
        )
    [1] => Array
        (
            [0] => Items
            [1] => Item1
            [2] => Item2
            [3] => Item3
            [4] => Item4
            [5] => Item5
            [6] => Item6
            [7] => Item7
        )
)
Почему то первый массив получаю ссылки, второй - нужные данные.
Поиск по коду:
HTML5
1
2
3
4
5
6
7
8
9
10
11
<div class="itemset">
<div class="itemsn"><a href="localhost/Items">Items</a></div>
<div class="itemsps">
<div class="itemsp"><a href="localhost/Item1">Item1</a></div>
<div class="itemsp"><a href="localhost/Item2">Item2</a></div>
<div class="itemsp"><a href="localhost/Item3">Item3</a></div>
<div class="itemsp"><a href="localhost/Item4">Item4</a></div>
<div class="itemsp"><a href="localhost/Item5">Item5</a></div>
<div class="itemsp"><a href="localhost/Item6">Item6</a></div>
<div class="itemsp"><a href="localhost/Item7">Item7</a></div>
</div>
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
25.10.2010, 10:05
Цитата Сообщение от Curse Посмотреть сообщение
Обычный массив, а не массив в массиве?
PHP
1
<?php print_r($match[1]); ?>

Цитата Сообщение от Curse Посмотреть сообщение
Почему то первый массив получаю ссылки, второй - нужные данные.
Не почему-то, а по вполне закономерным причинам. В нулевой подмассив попадают строки, соответствующие всему регулярному выражению. А в первый - строки, соответствующие подзапросу в первых скобках - (.+?)
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
25.10.2010, 19:50  [ТС]
Цитата Сообщение от ostgals Посмотреть сообщение
Не почему-то, а по вполне закономерным причинам. В нулевой подмассив попадают строки, соответствующие всему регулярному выражению. А в первый - строки, соответствующие подзапросу в первых скобках - (.+?)
А как можно массив под индексом 1 занести в базу данных?

Добавлено через 3 часа 23 минуты
И что можно делать с найденными строками в 300 символов? А то пишет Undefined variable.
0
 Аватар для ostgals
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
01.11.2010, 10:32
Цитата Сообщение от Curse Посмотреть сообщение
А как можно массив под индексом 1 занести в базу данных?
PHP
1
2
3
4
foreach ($match[1] as $value)
{
    // добавляем $value в БД
}
Цитата Сообщение от Curse Посмотреть сообщение
И что можно делать с найденными строками в 300 символов? А то пишет Undefined variable.
Этот момент я не понял. Что за строки? Где пишет?
1
4 / 4 / 0
Регистрация: 12.07.2010
Сообщений: 160
01.11.2010, 16:40  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
149. <?php
150.  $regexps4 = array(
151. 'Set_Bonus' => '#<div class="itemseteff"><p>(.+?)</p></div>#si',
152.   );
153.    foreach ($regexps4 as $key => $exp)
154.      if (preg_match($exp, $cod, $match)) $result4[$key] = $match[1];
155. ?>
156. <pre>
157. <?php print_r($result4); ?>
158. </pre>
159. <?php
160. mysql_query("INSERT INTO Sets (`" . implode("`, `",array_keys($result4))."`) VALUES('".implode("','", 161. array_map('mysql_real_escape_string',array_values($result4)))."');");
162. echo mysql_error();
163. ?>
пишет
Code
1
2
3
4
5
6
7
8
9
Notice:  Undefined variable: result4 in C:\wamp\www\cloaks.php on line 157
Notice: Undefined variable: result4 in C:\wamp\www\cloaks.php on line 160
Warning: array_keys() expects parameter 1 to be array, null given in C:\wamp\www\cloaks.php on line 160
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\cloaks.php on line 160
Notice: Undefined variable: result4 in C:\wamp\www\cloaks.php on line 160
Warning: array_values() expects parameter 1 to be array, null given in C:\wamp\www\cloaks.php on line 160
Warning: array_map() [function.array-map]: Argument #2 should be an array in C:\wamp\www\cloaks.php on line 160
Warning: implode() [function.implode]: Invalid arguments passed in C:\wamp\www\cloaks.php on line 160
Unknown column '' in 'field list'
а в базу массив с индексом 1 пишу так:
PHP
1
2
3
4
5
6
7
8
9
10
11
<?php
$regexps3 = '#<div class="items[a-z]"><a [^>]+>(.+?)</a></div>#si';
preg_match_all($regexps3, $cod, $match);
?>
<pre>
<?php print_r($match[1]); ?>
</pre>
<?php
mysql_query("INSERT INTO Sets (`" . implode("`, `",array_keys($match[1]))."`) VALUES('".implode("','", array_map('mysql_real_escape_string',array_values($match[1])))."');");
echo mysql_error();
?>
это не правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2010, 16:40

Обновление информации на странице
в общем хочу создать сайт, на котором информация на странице будет меняться при перезагрузке. Информация должна браться из базы данных. с...

Проверка серверной информации о странице
Хотел посмотреть, какую информацию предоставляет сервер о странице, и для этого я сделал тестовый HTML файл, внедрив в него вот такой РНР...

Сообщение о изменнение информации на странице
Здраствуйте, помогите пожалуйста написать скрипт для проверки изменений на странице. Тоесть у нас есть сайт http://www.example.com/, и...

Вывод информации из MySql на странице
Добрый день вам О великие гуру)))) Мне очень нужна ваша помощь! В общем трабл у меня такой. Необходимо отобразить данные из...

Вывод информации на странице из базы данных
Здравствуйте. Научился с помощью массива выводить из базы данных информацию на главной странице, в нужном порядке. Так же выводятся...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru