|
|
|
| Возникла проблема при парсинге тИЦ (со страницы 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>"Maxibit" - мобильные выставочные стенды</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>"Борус" - типография</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>"Полигранд" - центр оперативной полиграфии</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>"Мир Полиграфии" - полиграфический портал</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) которая находится на следующей строке после вышеприведенного кода. | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|
|
|
|
|
для: 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); | |
|
|
|
|
|
|
|
для: 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>";
?>
|
| |
|
|
|
|
|
|
|
для: 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. | |
|
|
|
|
|
|
|
для: 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>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(17.10.2005 в 19:38)
| | Нужно сделать это не для утрированной версии, а для HTML кода приведенного в первом посте. | |
|
|
|
|
|
|
|
для: Volodja
(19.10.2005 в 08:53)
| | Что выступает в качестве <img=image.gif> и где он в первом примере? | |
|
|
|
|
|
|
|
для: 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.) | |
|
|
|
|
|
|
|
для: 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>";
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.10.2005 в 14:03)
| | Код работает, спасибо за помощь | |
|
|
|
|
автор: Humbug (10.01.2006 в 11:37) |
|
|
для: cheops
(21.10.2005 в 14:03)
| | Все прекрасно, только замечено, что при положении сайта во второй десятке вывода, данные не считываются :( | |
|
|
|
|
|
|
|
для: 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)
| | Спасибо. Разобрался сам. :) | |
|
|
|