Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсинг тИЦ в Я каталоге
 
 автор: Volodja   (16.10.2005 в 12:22)   письмо автору
 
 

Возникла проблема при парсинге тИЦ (со страницы http://xml.yaca.yandex.ru/yca/cy/ch/urlsite) когда сайт находится в Яндекс каталоге. Нужно выдрать значение номера сайта из списка. HTML код привожу ниже:

1.</td><td width="*"><A target=_blank onclick="r(this, 'ctya')" href="http://www.maxibit.ru/" target=_blank>&#34;Maxibit&#34; - мобильные выставочные стенды</A></td><td align="right"><a href="http://www.yandex.ru/yandsearch/?text=&Link=http://www.maxibit.ru,http://maxibit.ru&iserverurl=www.maxibit.ru,maxibit.ru&numdoc=10&viddoc=full&sserver=0&ci=850" title="Кто ссылается">850</a></td></tr><tr valign="top"><td width="45"></td><td align="right" width="20">
2.</td><td width="*"><A target=_blank onclick="r(this, 'ctya')" href="http://www.borus.ru/" target=_blank>&#34;Борус&#34; - типография</A></td><td align="right"><a href="http://www.yandex.ru/yandsearch/?text=&Link=http://www.borus.ru,http://borus.ru&iserverurl=www.borus.ru,borus.ru&numdoc=10&viddoc=full&sserver=0&ci=700" title="Кто ссылается">700</a></td></tr><tr valign="top"><td class="current" valign="middle"><img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif"></td><td align="right" width="20">
3.</td><td width="*"><A target=_blank onclick="r(this, 'ctya')" href="http://www.polygrand.ru/" target=_blank>&#34;Полигранд&#34; - центр оперативной полиграфии</A><div>Цены на изготовление визиток различных типов и услуги веб-дизайна. Адреса пунктов приема/выдачи заказов.</div></td><td align="right"><a href="http://www.yandex.ru/yandsearch/?text=&Link=http://www.polygrand.ru,http://polygrand.ru&iserverurl=www.polygrand.ru,polygrand.ru&numdoc=10&viddoc=full&sserver=0&ci=650" title="Кто ссылается">650</a></td></tr><tr valign="top"><td width="45"></td><td align="right" width="20">
4.</td><td width="*"><A target=_blank onclick="r(this, 'ctya')" href="http://www.ruprint.ru/" target=_blank>&#34;Мир Полиграфии&#34; - полиграфический портал</A></td><td align="right"><a href="http://www.yandex.ru/yandsearch/?text=&Link=http://www.ruprint.ru,http://ruprint.ru&iserverurl=www.ruprint.ru,ruprint.ru&numdoc=10&viddoc=full&sserver=0&ci=600" title="Кто ссылается">600</a></td></tr><tr valign="top"><td width="45"></td><td align="right" width="20">

Номер сайта который нужно выдрать находится на следующей строчке после кода с картинкой:

<img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif"></td><td align="right" width="20">

Т.е. нужно выдрать цифру (3) которая находится на следующей строке после вышеприведенного кода.

   
 
 автор: cheops   (16.10.2005 в 15:10)   письмо автору
 
   для: Volodja   (16.10.2005 в 12:22)
 

Чего-то не очень понятно, где находится блок
<img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif"></td><td align="right" width="20">
В приведённом вами тексте, или это на той странице, откуда он взят? Тогда какая ссылка? Или из первого блока необходимо выбрать цифру 850, из второго 700 из третьего 650, а из четвёртого 600?

   
 
 автор: Volodja   (17.10.2005 в 07:35)   письмо автору
 
   для: cheops   (16.10.2005 в 15:10)
 

Приведенный HTML код взят со странички яндекса (обрезанный, и чуть не забыл, весь приведенный код находится в одной строчки). Блок находится перед номером нужного мне сайта, т.е. 3 (6 строчка в конце).
Я делаю так: забираю все значения тИЦ в массив, номер нужного массива в приведенном примере равен 2 (тИЦ нужного сайта равен 650, находится на 3 месте), нужно получить номер сайта, тИЦ которого хотим получить, т.е. цифру 3 (позже буду из полученной цифры отнимать 1), делать нужно типа так:

eregi('<img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif"></td><td align="right" width="20">([0-9]{1,2})',$buf1,$num);

   
 
 автор: cheops   (17.10.2005 в 13:27)   письмо автору
 
   для: Volodja   (17.10.2005 в 07:35)
 

Правильно ли я понял, что нужно найти номер (3) для сайта http://www.polygrand.ru/ и извлечь его тИЦ? В этом случае можно воспользоваться скриптом
<?php 
  $text 
file_get_contents("file.txt");

  
$pattern '|([\d])\.</td><td width="\*"><A [^ ]+ [^ ]+ [^ ]+ [^ ]+http://www.polygrand.ru/.*>([\d]+)<|isU';
  
preg_match_all($pattern,$text,$out,PREG_PATTERN_ORDER);
  echo 
$out[1][0]."<br>";
  echo 
$out[2][0]."<br>";
?>

   
 
 автор: Volodja   (17.10.2005 в 16:50)   письмо автору
 
   для: cheops   (17.10.2005 в 13:27)
 

Не, мне нужно найти не именно этот URL, это только для данного случяя мне нужно найти тИЦ сайта под номером 3, но ведь другие сайты, которых мне нужно будет найти тИЦ могут быть и на 1 и на 4 и на 7 месте. Мне нужно найти цыфру, которая идет после HTML кода с картинкой (код с картинкой только один на странице), т.е. <img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif"></td><td align="right" width="20">

Приведу утрированную альтернативу кода:

1.<a href=1>000</a>2.<a href=1>000</a><img=image.gif>3.<a href=1>000</a>4.<a href=1>000</a>5.<a href=1>000</a>

Мне нужно получить цыфру которая идет после кода <img=image.gif>, этот код может быть и после цыфры 2, и 3, и 4, и 5.

   
 
 автор: cheops   (17.10.2005 в 19:38)   письмо автору
 
   для: Volodja   (17.10.2005 в 16:50)
 

Тогда можно поступить так
<?php 
  $text 
"1.<a href=1>000</a>2.<a href=1>000</a><img=image.gif>3.<a href=1>000</a>4.<a href=1>000</a>5.<a href=1>000</a>"

  
$pattern '|<img=image.gif>([\d])\..*>([\d]+)<|isU'
  
preg_match_all($pattern,$text,$out,PREG_PATTERN_ORDER); 
  echo 
$out[1][0]."<br>"
  echo 
$out[2][0]."<br>"
?>

   
 
 автор: Volodja   (19.10.2005 в 08:53)   письмо автору
 
   для: cheops   (17.10.2005 в 19:38)
 

Нужно сделать это не для утрированной версии, а для HTML кода приведенного в первом посте.

   
 
 автор: cheops   (19.10.2005 в 14:55)   письмо автору
 
   для: Volodja   (19.10.2005 в 08:53)
 

Что выступает в качестве <img=image.gif> и где он в первом примере?

   
 
 автор: Volodja   (20.10.2005 в 23:07)   письмо автору
 
   для: cheops   (19.10.2005 в 14:55)
 

В первом сообщениии в качестве <img=image.gif> выступает <img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif"></td><td align="right" width="20"> (находится перед цыфрой 3.)

   
 
 автор: cheops   (21.10.2005 в 14:03)   письмо автору
 
   для: Volodja   (20.10.2005 в 23:07)
 

Посмотрите следующее регулярное выражение
<?php
  $pattern 
'|<img[^>]+http://img.yandex.ru/i/arr-hilite.gif[^>]+>[^>]+>[^>]+>[\s]*([\d])\..*>([\d]+)<|isU'
  
preg_match_all($pattern,$text,$out,PREG_PATTERN_ORDER); 
  echo 
$out[1][0]."<br>"
  echo 
$out[2][0]."<br>"
?>

   
 
 автор: Volodja   (21.10.2005 в 18:16)   письмо автору
 
   для: cheops   (21.10.2005 в 14:03)
 

Код работает, спасибо за помощь

   
 
 автор: Humbug   (10.01.2006 в 11:37)
 
   для: cheops   (21.10.2005 в 14:03)
 

Все прекрасно, только замечено, что при положении сайта во второй десятке вывода, данные не считываются :(

   
 
 автор: cheops   (10.01.2006 в 14:13)   письмо автору
 
   для: Humbug   (10.01.2006 в 11:37)
 

Чтобы отладить ситуацию, нужна сбойная страница, если вам не сложно, прикрепите её к посту или дайте ссылку.

   
 
 автор: Humbug   (10.01.2006 в 14:37)
 
   для: cheops   (10.01.2006 в 14:13)
 

Есть страница с этим кодом:

$text = get_content();
$pattern = '|<img[^>]+http://img.yandex.ru/i/arr-hilite.gif[^>]+>[^>]+>[^>]+>[\s]*([\d])\..*>([\d]+)<|isU'; 
preg_match_all($pattern,$text,$out,PREG_PATTERN_ORDER); 
echo $out[1][0]."<br />";
echo $out[2][0]."<br />"; 
function get_content(){
$site = $_GET["site"]; 
$link = "http://search.yaca.yandex.ru/yca/cy/ch/".$site."/"; 
$fd = fopen($link, "r"); 
$text=""; 
if (!$fd) echo "Запрашиваемая страница не найдена"; 
else {while (!feof ($fd)) $text .= fgets($fd, 4096);} 
fclose ($fd); 
return $text; 
}

Если страница располагается в первой десятке в выдаче Яндекса, то все работает нормально. Но если значение $out[1][0] становится больше 10 (включительно), то перестает работать.

PS. Возникла еще одна идея. А что если для получения тИЦ брать следующую строку

<a href="http://www.yandex.ru/yandsearch/?text=&Link=http://www.site.ru,http://site.ru&iserverurl=www.site.ru,site.ru&numdoc=10&viddoc=full&sserver=0&ci=1000" title="Кто ссылается">

Здесь значение тИЦ указано. Можно ли ее разобрать и получить значение тИЦ?
Этот код содержится в части:

<img border="0" height="25" width="28" alt="" src="http://img.yandex.ru/i/arr-hilite.gif">
</td>
<td align="right" width="20">1.</td>
<td width="*">
<A target=_blank onclick="r(this, 'ctya')" href="http://www.site.ru/" target=_blank>Site</A>
<div>info</div>
</td>
<td align="right">
<a href="http://www.yandex.ru/yandsearch/?text=&Link=http://www.kss.ru,http://kss.ru&iserverurl=www.kss.ru,kss.ru&numdoc=10&viddoc=full&sserver=0&ci=2000" title="Кто ссылается">2000</a>

   
 
 автор: Humbug   (10.01.2006 в 14:45)
 
   для: cheops   (10.01.2006 в 14:13)
 

В предыдущих примерах названия сайтов www.site.ru и www.kss.ru идентичны.
Последний взят в качестве примера.

   
 
 автор: Humbug   (10.01.2006 в 15:36)
 
   для: cheops   (10.01.2006 в 14:13)
 

Спасибо. Разобрался сам. :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования