Вот есть у меня такая регулярочка, нужно вытащить якорь.
'%(?<=<p class="free"> <a href="|" title="|">)[^><]+?(?=</a></p> </div>)%';
В итоге если класс не указывать ,обрезает все нужные и ненужные,
вот в упор не помню можно ли сделать чтоб он пропускал любой текст в href и title а вырезал именно якорь.
Спустя 32 минуты, 31 секунда (5.05.2012 - 09:19) Adamant написал(а):
Я не понял ничего. Вы регуляркой своей извлекаете текст якоря. И все равно что содержится в теге P есть ли там атрибуты или нет. Текст якоря в любом случае получается.
Приведите ваш текст в котором вы ищете, и что у вас не получается конкретно. А ваш код работает в любом случае
Приведите ваш текст в котором вы ищете, и что у вас не получается конкретно. А ваш код работает в любом случае
Спустя 11 минут, 11 секунд (5.05.2012 - 09:30) evdonik написал(а):
Вообщем пишу парсер новостей с сайта, беда в том что регулярки плоховато знаю, для начала вырезаю ссылки
Которые относятся к классу free - это новости в свободном доступе, но есть и класс paid или simplea - это новости с платным доступом, с ними отдельный разговор, после того как вырезал ссылку нужен якорь, но якорь зараза вырезается и на классе paid и на simple, то есть получается допустим 51 ссылка и 102 якоря, вырезанных со всех якорей..вот я и хочу чтоб только промежутке класса free вырезал..просто пропускал бы что в href и в title ,но ориентировался на то что класс free.
Режем ссылки.
Режем якорь.
До нововведений была такая регулярка, которая все классы резала
вот ссылка на источник новостей
http://63media.ru/press/26.04.2012/all/
Которые относятся к классу free - это новости в свободном доступе, но есть и класс paid или simplea - это новости с платным доступом, с ними отдельный разговор, после того как вырезал ссылку нужен якорь, но якорь зараза вырезается и на классе paid и на simple, то есть получается допустим 51 ссылка и 102 якоря, вырезанных со всех якорей..вот я и хочу чтоб только промежутке класса free вырезал..просто пропускал бы что в href и в title ,но ориентировался на то что класс free.
$src['preg1'][] = '%(?<=<p class="free"> <a href=")[^><]+?(?=")%';
Режем ссылки.
$src['preg2'][] = '%(?<=<p class="free"> <a href="\d\D" title="\d\D">)[^><]+?(?=</a></p> </div>)%';
Режем якорь.
До нововведений была такая регулярка, которая все классы резала
$src['preg3'][] = '%(?<=">)[^><]+?(?=</a></p> </div>)%';
вот ссылка на источник новостей
http://63media.ru/press/26.04.2012/all/
Спустя 2 часа, 16 секунд (5.05.2012 - 11:30) Adamant написал(а):
$pattern = '%<p\s+class="free">\s*<a href="(.+)" title=".+">(.+)<\/a><\/p>%iU';
preg_match_all($pattern, file_get_contents('http://63media.ru/press/26.04.2012/all/'), $matches);
echo "<pre>";
// Тут у нас все ссылки
print_r($matches[1]);
// Тут у нас текст якорей
print_r($matches[2]);
echo "</pre>";
Спустя 34 минуты, 38 секунд (5.05.2012 - 12:05) evdonik написал(а):
Цитата (Adamant @ 5.05.2012 - 09:30) |
|
От спасибо большое)))
все работает))
Спустя 16 минут, 42 секунды (5.05.2012 - 12:21) evdonik написал(а):
Вопрос попутный возник.
а просто пропустить не занося в массив ссылки можно каким нибудь образом?
Чтоб был только один массив с якорями.
а просто пропустить не занося в массив ссылки можно каким нибудь образом?
Чтоб был только один массив с якорями.
Спустя 42 минуты, 33 секунды (5.05.2012 - 13:04) Adamant написал(а):
$pattern = '%<p\s+class="free">\s*<a href=".+" title=".+">(.+)<\/a><\/p>%iU';
preg_match_all($pattern, file_get_contents('http://63media.ru/press/26.04.2012/all/'), $matches);
echo "<pre>";;
// Один массив с текстом якорей
print_r($matches[1]);
echo "</pre>";
Спустя 4 минуты, 9 секунд (5.05.2012 - 13:08) evdonik написал(а):
Да вот в том то и беда что не получается))
Вообщем вот код
Вот обработчки, так как парсер более мнее пытаюсь сделать универсальным чтоб парсить разные сайт новостные, только исправив преги.
Вообщем вот код
$src['name'][] = "63media.ru";
$src['preg1'][] = '%(?<=<p class="free"> <a href=")[^><]+?(?=")%';
$src['preg2'][] = '%<p\s+class="free">\s*<a href=".+" title=".+">(.+)<\/a><\/p>%iU';
$src['preg3'][] = '%<p\s+class="free">\s*<a href=".+" title=".+">(.+)<\/a><\/p>%iU';
$src['preg4'][] = '%(?<=<p class="free"> <a href="/press/)[^><]+?(?=/)%';
$src['preg5'][] = '%(?<=</h2><p>)[^><]+?(?=<\/p>)%';
$src['preg6'][] = '%(?<=<h2>)[^><]+?(?=</h2>)%';
$src['preg7'][] = '%(?<=class="free"><a href="/press/)[^><]+?(?=/)%';
$src['preg8'][] = "...";
$src['url'][]=$urlik;
$src['prefix'][] = "http://63media.ru";
$src['date_delimiter'][] = ".";
$src['date_format'][] = "DD.MM.YY";
$codepage = "cp-1251";
Вот обработчки, так как парсер более мнее пытаюсь сделать универсальным чтоб парсить разные сайт новостные, только исправив преги.
function get_snippets ($i)
{
global $src, $mark_last_days;// шобы доступ к массиву с конфигом получить
//кач-кач источник
$fff = geturl($src['url'][$i]);
echo "Получили " . strlen($fff) . " байт<br>";
preg_match_all($src['preg1'][$i], $fff, $reslist);
$links = $reslist[0];
// print_r($links);
preg_match_all($src['preg2'][$i], $fff, $reslist); //Получение якорей Массив [0]
$titles = $reslist[0];
$titles = convert_codepage ($codepage,$titles);
//print_r($titles);
preg_match_all($src['preg3'][$i], $fff, $reslist);
$snippet = $reslist[0];
$snippet=convert_codepage ($codepage,$snippet);
//print_r($snippet);
preg_match_all($src['preg4'][$i], $fff, $reslist);
$data = $reslist[0];
//print_r($data);
for($l=0; $l<count($data); $l++)
{
$sig = md5($src['prefix'][$i].$links[$l]);
if(file_exists("sig/".$sig))
{
// duplicate
echo "<tr bgcolor='PaleGreen'><td></td><td>".$src['name'][$i]."</td> <td>".$data[$l]."</td>
<td><a href='".$src['prefix'][$i].$links[$l]."' class='iframe'>Предпросмотр</a></td><td>".$titles[$l]."</td><td>".$snippet[$l]."</td></tr>";
}else{
// new article
$date = convert_date($data[$i], $src['date_delimiter'][$i], $src['date_format'][$i]);
if(strtotime($date)>(time()-($mark_last_days*24*60*60)))
{
$color = "lime";
}else{
$color = "Lavender";
}
echo '<tr bgcolor="Lavender" onclick="toggle(this,event)">';
echo '<td bgcolor="Lavender"><div><input type="checkbox" class="check" style="margin: 15px;" name="source'.$i.'-'.$l.'" value="'.base64_encode($src['prefix'][$i].$links[$l]).'"></td></div>';
echo "<td>".$src['name'][$i]."</td> <td>".$data[$l]."</td><td><a href='".$src['prefix'][$i].$links[$l]."' >Предпросмотр</a></td><td bgcolor='".$color."'>".$titles[$l]."</td><td>".$snippet[$l]."</td></tr>";
}
}
}[php]