|
|
|
| добрый день..
Подскажите как сделать следующее:
Необходимо загружать страницу из интернета, которая представляет собой страницу со строками следующего вида:<p>1. <b>0-58710-1</b> [ RELIANCE ELECTRIC ] 1 TERMINAL BOARD - <noindex><a href="бла-бла-бла" title="бла-бла-бла">Запросить</a></noindex></p>
нужно выбрать информацию из всех таких строк помесщать их в дб,а именно: между тегом <b></b> - name, то что в квадратных скобках - producer, оставшееся до тега <noindex> - desciption..как организовать цикл по перебору и загрузки в бд..
Спасибо | |
|
|
|
|
|
|
|
для: webzz
(02.03.2008 в 17:59)
| | preg_match("/<p>.*<b>(.*?)<\/b>(.*?)<noindex>.*<\/p>/Uis",$t,$a);
данное выражение распарсивает строчку исходную, в массиве нужные значения..
как загружать страницы наилучшим образом через curl или file_get_contents..необходимо в общем в цикле загружать страницы, выбирать в цикле все значения и класть в бд..а страниц много..нужен самый быстрый и не ресурсоемкий способ потому что скрипт будет запускаться на хостинге..
если возможно пример цикла перебора и выбора значений.. | |
|
|
|
|
|
|
|
для: webzz
(02.03.2008 в 18:42)
| | да блин..еще и регулярное выражение составлено не правильно.. | |
|
|
|
|
|
|
|
для: webzz
(02.03.2008 в 21:43)
| |
@error_reporting(E_ALL ^ E_NOTICE);
@ini_set('display_errors', true);
@ob_start();
ini_set(max_execution_time, 0);
ini_set(memory_limit, 256);
$last = 50441;
for ($i=1; $i<=$last; $i++) {
$Timer->start();
$file = "http://www.site.ru/l-$i.html";
$f = fopen("$file", "r");
while (!feof ($f)) {
$st=fgets($f);
preg_match("/<p>(.*?)<b>(.*?)<\/b>(.*?) - <noindex>.*<\/p>/Uis",$st,$a);
/*запись в базу данных*/
}
echo "Время выполнения скрипта для $i страницы ".$Timer->stop()." секунд";
fclose($f);
}
|
пока получился вот такой вот цикл..подскажите как его можно модифицировать в сторону большего увеличения скорости..а также приведения регулярного выражения к правильному формату,а именно необходимо выбирать только данные между тегами <b></b>, то что находится в квадратных скобках и от закрывающейся квадратной скобки до тире | |
|
|
|
|
|
|
|
для: webzz
(02.03.2008 в 23:23)
| | в данном случае думаю разумно загрузить фаил на сервер.
потом читать его построчно.
также у вас в цикле while каждый раз идет обращение к базе данных и запись в неё, думаю лучше формировать строку, предположим для каждого файла $t .= "($a[1],$a[2],$a[3]),"; потом вставлять её в запрос на запись в бд | |
|
|
|
|
|
|
|
для: Agronom
(05.03.2008 в 14:23)
| | А несчет регулярного можно попробовать такой вид:
preg_match("/^(?imsx-imsx:.*?)<b>(.*?)<\/b>\s\[\s(.*?)\s\]\s(.*?)\s-(?imsx-imsx:.*)$/Uis",$st,$a); | |
|
|
|
|
|
|
|
для: Agronom
(05.03.2008 в 14:39)
| | за регулярное выражение спасибо..подходит идеально..остальное так и делается | |
|
|
|
|
|
|
|
для: webzz
(05.03.2008 в 23:36)
| | только я там переборщил ?imsx-imsx: , достаточно только ?: | |
|
|
|