|
|
|
| Привет. Вот искал-искал нормальный граббер, так и не нашёл..везде какие-то недочёты. Кто может помочь или советами, или ссылками, или ещё чем по этому поводу?
Задача такая:
Есть сайт(страница). Нужно вытаскивать инфу с этой страницы. Только досканально точно, вполоть до <tr> и т.д.. Также нужно делать исключения, тоесть если трудно досканально вырезать текст, то запретить скриптом какие-то опеределённые элементы, т.к. в тесте часто встречаются и картинки и флешки и просто лишние таблицы. Также желательно запрограммировать скрипт на определённый период, с которым он будет сканировать страницу. Также нужно чтобы он её сохранял, это для того, чтобы не было нагрузки на сервак, при каждом запрсе скрипта, т.к. сканирование ресурса нужно всего раз-два в неделю..
Заранее всем благодарен, надеюсь на помощь и советы. | |
|
|
|
|
|
|
|
для: slonik
(19.10.2006 в 17:08)
| | А у тебя какие идеи? Наброски? Или ты хочешь сразу готовый скрипт? Для каждого сайта нужен свой граббер. | |
|
|
|
|
|
|
|
для: xexe
(19.10.2006 в 17:15)
| | Наброски я нашёл в инете:) Собирать велосипед в данном случае глупо.. а вот усовершенствовать велик уже можно:
<?php
// начало
$link = "http://netadmin.ws";
$file = @fopen($link, "r");
if ($file) { $rf = fread($file, 200000); fclose($file); } else { echo "<h3 align=center>Извините,
запрошенная страница временно не доступна!</h3>"; }
// 1
$rf = trim (chop ($rf));
$s = strpos($rf, "mesto dlya nachala perehvata", 0);
$rf = substr($rf, $s);
// 2
$s = strpos($rf, "mesto dlya konca perehvata");
$rf = substr($rf, 0, $s);
// 3
$rf = str_replace ("/forum/","http://netadmin.ws/forum/", $rf);
$rf = str_replace ("/admin/","http://netadmin.ws/admin/", $rf);
$rf = str_replace ("ACTION=/member/quick","ACTION=http://netadmin.ws/member/quick", $rf);
// 4
echo $rf;
?>
|
Этот скрипт работает, но он вбирает в себя слишком много лишнего, а как запретить чё-то не могу допереть..
По поводу "для каждого сайта, свой граббер" - это понятно.. вот мне и хочется хорошую основу, а дальше уж постараюсь разобраться.
p.s. О готовом скрипте и не мечтал, т.к. людская скупость неповержима. | |
|
|
|
|
|
|
|
для: slonik
(19.10.2006 в 17:19)
| | можно использовать функцию explode() например:
<?
$file = file_get_contents('http://netadmin.ws');
$a = explode('mesto dlya nachala perehvata',$file);
$b = explode('mesto dlya konca perehvata', $a[1]);
print $b[0];
?>
|
| |
|
|
|
|
|
|
|
для: slonik
(19.10.2006 в 17:19)
| | Вряд ли этот скрипт работает правильно .. так как в substr вторым параметром передается не "координата" конца, а длина возвращаемой строки
* * *
$rf = substr($rf, $s);
* * *
$s = strpos($rf, "mesto dlya konca perehvata");
$rf = substr($rf, 0, $s);
|
пс: вместо этого лучше велосипед изобрести :) | |
|
|
|
|
|
|
|
для: kasmanaft
(19.10.2006 в 18:06)
| | Так, сорри, что так долго не писал, всё никак не мог попасть к компу.
Вот взяли этот код:
<?
$file = file_get_contents('http://netadmin.ws');
$a = explode('mesto dlya nachala perehvata',$file);
$b = explode('mesto dlya konca perehvata', $a[1]);
print $b[0];
?>
|
Работает. Но как я и говорил, мне нужно очень точно вырезать и иметь возможность запрещать некоторые элементы страницы. Прямо явно указывая этот элемент. Как это можно сделать? | |
|
|
|
|
|
|
|
для: slonik
(20.10.2006 в 20:52)
| | Что значит "запрещать некоторые элементы страницы" ?
Вырезать этот элемент или как? | |
|
|
|
|
|
|
|
для: kasmanaft
(20.10.2006 в 21:43)
| | Ну да. Вот есть там картинка, нужно её исключить из кода, чтобы она не отображалась. Только сложность в том, что адреса у картинок разные и их много, есть какой-нибудь способ не обращать внимание на названия файлов(картинок)? | |
|
|
|
|
|
|
|
для: slonik
(20.10.2006 в 21:46)
| | Что значит "не обращать внимание на названия файлов(картинок)" ? =)) :))
Эти теги можно будет просто вырезать из текста ...
<?php
$text = 'Ну да. Вот есть там картинка <img src=blablabla>, нужно её '.
'исключить из кода, чтобы она не отображалась.';
echo preg_replace("#<img[^>]*?>#", "", $text);
?>
|
пс ... для всего прочего, связанного с сабжем, лучше использовать рег. выражения ... | |
|
|
|
|
|
|
|
для: kasmanaft
(20.10.2006 в 21:57)
| | Во, пасиб! Получилось.
А каким образом сохранить созданный файл на диске? Или будет вообще идеально, если можно будет записать данные в бд.
p.s. А где можно посмотреть, как создавать такие вещи - "#<img[^>]*?>#" А то там ещё много-чего надо вырезать, а могзгов не хватает допереть, как составить запрос. | |
|
|
|
|
|
|
|
для: slonik
(20.10.2006 в 22:26)
| | Можно в файл записать, можно в БД:
<?
// файл
$text = 'text';
$file = fopen ('filename', 'w');
fputs ($file, $text);
fclose ($file);
// БД
if (!get_magic_quotes_gpc())
{
$text = mysql_escape_string($text);
}
mysql_query ("INSERT INTO table VALUES ( * * * , '$text', * * *)");
?>
|
а про рег. выражения почитать можно здесь:
http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php | |
|
|
|
|
|
|
|
для: kasmanaft
(20.10.2006 в 23:04)
| | Спасибо, ща буду разбираться. | |
|
|
|