PDA

Просмотр полной версии : php, сессия, копирование


rubik-nerubik
10.07.2007, 13:13
Народ, как бы мне сделать что-то вароде граббера .т.е. нужен скрипт на пхп, который при заходе на него открывает какую-то определенную страницу и копирует заданную часть строки, типа от <body> до </body>...

Isis
10.07.2007, 13:27
<html>
<head><title>Parser</title></head>
<body>
<form method="POST">
Location of the file: <input type="text" name="url" value="" style="width: 120;height:20;" /><br/></br>
Before: <input type="text" name="before" value="" style="width: 60;height:20;" /><br/></br>
After: <input type="text" name="after" value="" style="width: 60;height:20;" /><br/></br>
<input type="submit" name="end" value="Parse..."/>
</form>
<?php
set_time_limit(0);

$url = isset($_POST['url']) ? $_POST['url'] : '';
$before = isset($_POST['before']) ? $_POST['before'] : '';
$after = isset($_POST['after']) ? $_POST['after'] : '';
$end = isset($_POST['end']) ? $_POST['end'] : '';
$file = 'file.txt';

if($end)
{
if($url && $before && $after)
{
$ps = file_get_contents($url);

$pattern = "#".$before."(.*?)".$after."#is";

preg_match_all($pattern, $ps, $out, PREG_SET_ORDER);
foreach($out as $row)
{
if($handle = fopen($file, 'ab'))
{
fwrite($handle, $row[1]."\r\n");
fclose($handle);
}
}
}
else
{
echo "Заполните все поля";
}
}
?>
</body>
</html>


Вписываешь ссылку в первое поле...
Во второе поле вписываешь слово или тэг от которого будет браться все до второго тэга(3 поля)
Короче допустим ввели в первое поле: http://www.mail.ru
Во второе: <body bgcolor=white topmargin=0 leftmargin=0 rightmargin=0 marginwidth=0 marginheight=0 >
В третье: </body>

То в файл file.txt запишет все что находится между этими тэгами

Helios
11.07.2007, 17:43
эм... а причем тут сессия?

Isis
11.07.2007, 17:46
Helios, да етма вообще создана не по названия...
Сначла вроде было другое название и в другом разщделе..
Перенесли и переименовали тему видимо...
Ток к чему..
ВПоолне обычное нахвание должно быть - Парсер

vizard-06
15.07.2007, 02:24
<?
$i=file_get_contents('ссылка на страницу');
preg_match_all("/\<body\>(.*?)\<\/body\>/i",$i,$p);
echo $p[1][0];
?>

GreenBear
15.07.2007, 03:02
а зачем _all?

vizard-06
15.07.2007, 03:07
а зачем _all?
на всякий случай он загадочно говорил может он удет использовать другой тег и в каждом нужна будет такая процедура))
Если нет то вот без _all
<?
$i=file_get_contents('ссылка на страницу');
preg_match("/\<body\>(.*?)\<\/body\>/i",$i,$p);
echo $p[1];
?>

Isis
15.07.2007, 03:08
GreenBear, ну может vizard-06 посчитал что боди может быть не одно на странице...
vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
И вывести
print_r($row[1]);

vizard-06
15.07.2007, 03:17
GreenBear, ну может vizard-06 посчитал что боди может быть не одно на странице...
vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
И вывести
print_r($row[1]);
незнаю что там у тебя не работает у меня всё работает например я использую так

<?
$bash='<div>рез</div><div>два</div><div>три</div><div>четыре</div><div>пять</div><div>....</div>';
$kol_pars=preg_match_all("/\<div\>(.*?)\<\/div\>/i",$bash,$bash_pars);
for($i=0;$i<$kol_pars;$i++)
echo $bash_pars[0][$i].'<br>';
?>

:D :D :D

_Great_
15.07.2007, 09:13
for($i=0;$i<$kol_pars;$i++)
echo $bash_pars[0][$i].'<br>';

Только не $bash_pars[0][$i], а $bash_pars[1][$i].


vizard-06, твой скрипт работать не будет т.к. в нашем случае preg_match_all нужен четвертый параметр PREG_SET_ORDER
И вывести
print_r($row[1]);
С какой радости не будет? И без прег_сет_ордер жизнь прекрасна.
В массиве $p[1] будут вхождения первой подмаски, индексом [0] выбирается первое.
Это используемый по дефолту тип PREG_PATTERN_ORDER