нужно выдрать ИД и имя вещи
в формате
100001183 Меч отшельника
отсюда
<tr>
<td class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40"></div></td>
<td class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001183,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td>
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>
вот тут
<a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td>
id=100001183
>Меч отшельника</a>
Спустя 32 минуты, 25 секунд (12.06.2012 - 19:26) Winston написал(а):
Свернутый текст
$txt = '<a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td& amp; gt;
<a href="http://aidb.ru/?aion=item_info&id=10" style="color: rgb(44, 143, 214);">Меч отшельника 2</a><br><em>no_name</em></span></p></div></td>
<a href="http://aidb.ru/?aion=item_info&id=100500" style="color: rgb(44, 143, 214);">Меч отшельника 3</a><br><em>no_name</em></span></p></div></td>';
preg_match_all('#id=(\d+)".*>(.*)</a>#U', $txt, $res);
echo '<pre>' . print_r($res, 1);
Оно?
Спустя 3 минуты, 3 секунды (12.06.2012 - 19:30) OneFinal написал(а):
не совсем нужно в формате
а тут получается
100001183 Меч отшельника
а тут получается
Array
(
[0] => Array
(
[0] => id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника
[1] => id=10" style="color: rgb(44, 143, 214);">Меч отшельника 2
[2] => id=100500" style="color: rgb(44, 143, 214);">Меч отшельника 3
)
[1] => Array
(
[0] => 100001183
[1] => 10
[2] => 100500
)
[2] => Array
(
[0] => Меч отшельника
[1] => Меч отшельника 2
[2] => Меч отшельника 3
)
)
Спустя 4 минуты, 36 секунд (12.06.2012 - 19:34) Winston написал(а):
Цитата (OneFinal @ 12.06.2012 - 19:30) |
не совсем нужно в формате |
А пошевелить мозгом и сделать самому? Регулярку уже тебя написал.
Спустя 3 минуты, 23 секунды (12.06.2012 - 19:38) OneFinal написал(а):
я к такому тоже пришел, но не могу вот это убрать.
style="color: rgb(44, 143, 214);">
Спустя 5 минут, 10 секунд (12.06.2012 - 19:43) Winston написал(а):
Цитата (OneFinal @ 12.06.2012 - 19:38) |
я к такому тоже пришел, но не могу вот это убрать. |
А ты не используй нулевой массив. Работай с массивами 1 и 2, можно цикл использовать, чтобы добиться нужного результата.
Спустя 1 час, 30 минут, 30 секунд (12.06.2012 - 21:13) OneFinal написал(а):
сделал, получилось:) теперь вопрос в другом
как все это дело занести в таблицу?
так не получаеться, он берет первое ИД и с этим ИД добавляет все имена.
как все это дело занести в таблицу?
foreach ($arr[1] as $id)
{
foreach($arr[2] as $name){
$sql1 = mysql_query("INSERT INTO `test` (`id`,`name`) VALUES ('$id','$name')") or die(mysql_error());
}
}
так не получаеться, он берет первое ИД и с этим ИД добавляет все имена.
Спустя 12 часов, 21 минута, 51 секунда (13.06.2012 - 09:35) Winston написал(а):
$sql = array();
foreach(array_combine($res[1], $res[2]) as $key => $val)
$sql[] = '("' . (int)$key . '", "' . mysql_real_escape_string($val) . '")';
$sql1 = mysql_query("INSERT INTO `test` (`id`,`name`) VALUES " . implode(', ', $sql)) or die(mysql_error());
Получается...
Спустя 36 минут, 41 секунда (13.06.2012 - 10:12) killer8080 написал(а):
$t = '
<tr>
<td class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40"></div></td>
<td class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001183,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td& gt;
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>
';
preg_match_all('#http\://aidb\.ru/\?aion\=item_info&id\=(\d+)[^>]*>(.*)</a>#i', $t, $m);
echo '<pre>'.print_r($m, 1).'</pre>';
Спустя 1 день, 7 часов, 21 минута, 10 секунд (14.06.2012 - 17:33) OneFinal написал(а):
получилось, считаю себя дибилом, уже 2 недели не могу нормально понять это все дело, и написать наконецто нормальную регулярку, нужно взять полностью все данные из этого.
т.е ссылку на картинку
потом ИД и Имя уже получил нужно получить ещё Лвл т.е отсюда
и атаку
и вот эти данные
подкиньте меня в правельном направлении
<tr>
<td class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40"></div></td>
<td class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001183,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001183" style="color: rgb(44, 143, 214);">Меч отшельника</a><br><em>no_name</em></span></p></div></td& gt;
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>
т.е ссылку на картинку
<img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_l01.png" alt="Меч отшельника" height="40" width="40">
потом ИД и Имя уже получил нужно получить ещё Лвл т.е отсюда
<td class="td3"><div class="td-rp"><span>60</span></div></td>
и атаку
<td class="td4"><div class="td-rp"><span>176 - 216</span></div></td>
и вот эти данные
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
подкиньте меня в правельном направлении
Спустя 1 час, 30 минут, 2 секунды (14.06.2012 - 19:03) OneFinal написал(а):
preg_match_all("#<div class=\"td-rp\"><span>([0-9]{1,2})</span></div></td>#","$string",$arr);
что бы получить лвл и атаку, теперь как его засунуть в глав регулярку ?
preg_match_all("#<div class=\"td-rp\"><span>([0-9]{1,2})</span></div></td>#i","$string",$level);
preg_match_all("#<div class=\"td-rp\"><span>(.*[1-9])</span></div></td>#i","$string",$attak);
и для картинок
$images = array();
preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $string, $media);
unset($string);
$string = preg_replace('/(img|src)("|\'|="|=\')(.*)/i', "$3", $media[0]);
foreach ($string as $url) {
$info = pathinfo($url);
if (isset($info['extension'])) {
if (($info['extension'] == 'jpg') ||
($info['extension'] == 'jpeg') ||
($info['extension'] == 'gif') ||
($info['extension'] == 'png'))
array_push($images, $url);
}
}
Спустя 59 минут, 14 секунд (14.06.2012 - 20:02) OneFinal написал(а):
up помогите, уже в ступоре...
Спустя 56 минут, 52 секунды (14.06.2012 - 20:59) walerus написал(а):
OneFinal прикрепи весь HTML код, желательно не портянкой, а файлом, а то потом окажется что еще что то мешает в коде и не парсится как нужно.
Спустя 15 часов, 32 минуты, 23 секунды (15.06.2012 - 12:31) OneFinal написал(а):
rghost.ru/38674345 вот тут сохраненная стр.
Спустя 1 час, 23 минуты, 23 секунды (15.06.2012 - 13:55) inpost написал(а):
OneFinal
Я не понимаю твоей проблемы, ты использовал регулярку и получил в итоге большой массив, в котором часть элементов верные тебе. Что мешает их и вывести через echo $matches[5][17] ? Всё ведь верно и работает! Собственно это и сказал выше Винстон, что указывай ключи верно и получишь то, что тебе надо.
И вообще, парсишь ты не то, что видят твои глаза, а HTML код, поэтому это нормально, что в массиве могут быть лишние элементы, которые просто вырезать надо из финального результата.
Я не понимаю твоей проблемы, ты использовал регулярку и получил в итоге большой массив, в котором часть элементов верные тебе. Что мешает их и вывести через echo $matches[5][17] ? Всё ведь верно и работает! Собственно это и сказал выше Винстон, что указывай ключи верно и получишь то, что тебе надо.
И вообще, парсишь ты не то, что видят твои глаза, а HTML код, поэтому это нормально, что в массиве могут быть лишние элементы, которые просто вырезать надо из финального результата.
Спустя 47 минут, 16 секунд (15.06.2012 - 14:42) OneFinal написал(а):
эм... покажи пример, как скомбинировать все массивы пож
Спустя 29 минут, 4 секунды (15.06.2012 - 15:11) inpost написал(а):
Какие все массивы? Я вижу поиск одного элемента, который находится в одном многомерном массиве.
Спустя 36 минут, 31 секунда (15.06.2012 - 15:48) OneFinal написал(а):
ну смотри, я делаю preg_match_all( ) на каждый элемент, получаю массу массивов, теперь как их соединить и потом занести в базу по своим колонкам?
Спустя 51 минута, 55 секунд (15.06.2012 - 16:40) killer8080 написал(а):
$t = '
<tr>
<td class="td1"><div class="td-f"><img src="%D0%9F%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D1%8B%20-%20%D0%B1%D0%B0%D0%B7%D0%B0%20%D0%B7%D0%BD%D0%B0%D0%BD%D0%B8%D0%B9%20%D0%90%D0%B9%D0%BE%D0%BD%203.0%20%28Aion%29_files/icon_item_sword_e01.png" alt="Меч командира аканов-стражей" height="40" width="40"></div></td>
<td class="td2"><div class="td-rp"><p><span><a href="javascript:show_3d(100001237,3);" style="color: rgb(255, 0, 0);">[Вид в 3D]</a> <a href="http://aidb.ru/?aion=item_info&id=100001237" style="color: rgb(255, 128, 51);">Меч командира аканов-стражей</a><br><em>no_name</em></span></p></div>< /td>
<td class="td3"><div class="td-rp"><span>60</span></div></td>
<td class="td4"><div class="td-rp"><span>192 - 235</span></div></td>
<td class="td5"><div class="td-rp"><span>- / - / -</span></div></td>
<td class="td6"><div class="td-r"><span><b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b> / <b class="d_red">Нет</b></span></div></td>
</tr>
';
preg_match_all(
'#<tr>.*'.
'<td class="td1">.*<img.+src="(.*)".*>.*</td>.*'.
'<td class="td3">.*<span>(.*)</span>.*</td>.*'.
'<td class="td4">.*<span>(.*)</span>.*</td>.*'.
'<td class="td5">.*<span>(.*)</span>.*</td>.*'.
'</tr>#isUu',
$t,
$m
);
echo '<pre>'.htmlspecialchars(print_r($m, 1)).'</pre>';
Спустя 3 часа, 57 минут, 53 секунды (15.06.2012 - 20:37) OneFinal написал(а):
все получилось но тут проблема
функц. array_combine принимает только 2 массива, как обработать 4?
функц. array_combine принимает только 2 массива, как обработать 4?
$sql = array();
foreach(array_combine($arr[2],$arr[3],$arr[4],$arr[5]) as $key => $val)
$sql[] = '("' . (int)$key . '", "' . mysql_real_escape_string($val) . '")';
$sql1 = mysql_query("INSERT INTO `test` (`img`,`id`,`name`,`attack`) VALUES " . implode(`,`,`,`,$sql)) or die(mysql_error());
Спустя 2 часа, 20 минут, 54 секунды (15.06.2012 - 22:58) Winston написал(а):
foreach(array(array_combine($arr[2],$arr[3]), array_combine($arr[4],$arr[5])) as $key => $val)
?
Спустя 9 минут, 24 секунды (15.06.2012 - 23:08) OneFinal написал(а):
Warning: mysql_real_escape_string() expects parameter 1 to be string, array given in
Warning: implode() expects at most 2 parameters, 3 given in
Спустя 1 час, 16 минут, 52 секунды (16.06.2012 - 00:25) OneFinal написал(а):
вопрос не совсем по теме, вот скрипт отсылает пост запрос к серверу и получает html стр. потом я прогоняю её через регуляр но получаю пустой массив, почему ?
$url = 'http://aidb.ru/?aion=items';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, 'i_quality=1&i_version=5&i_param=0&i_param_charge=0&i_spec_sell=0&class=1&min_lvl=50&max_lvl=55&doItem=1');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($curl);
echo $html;
preg_match_all('#<td class="td1">.*<img.+src="(.*)".*>.*</td>.*'.
'id=(\d+)".*>(.*)</a>.*'.
'<td class="td3">.*<span>(.*)</span>.*'.
'<div class=\"td-rp\"><span>(.*)</span></div>.*</td>#isUu',$html,
$arr
);
print_r ($arr);
Спустя 25 минут, 18 секунд (16.06.2012 - 00:50) OneFinal написал(а):
Все зароботало с флагами
#Us
Спустя 9 часов, 20 минут, 40 секунд (16.06.2012 - 10:11) OneFinal написал(а):
up люди помогите домучать
Спустя 1 день, 23 часа, 21 минута, 56 секунд (18.06.2012 - 09:32) killer8080 написал(а):
Цитата (OneFinal @ 15.06.2012 - 20:37) |
функц. array_combine принимает только 2 массива, как обработать 4? |
А зачем тебе вообще понадобился array_combine()?