Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение записей из html страницы, класс WebClient 
:(
    Опции темы
Georgich
  Дата 25.6.2009, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Приветствую.
В MSDN почитал про класс WebClient: http://msdn.microsoft.com/ru-ru/library/sy....webclient.aspx
Решил посмотреть в деле. Сделал этот код для получения содержимого страницы ya.ru:
Код

WebClient client = new WebClient();
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
Stream data = client.OpenRead("http://www.ya.ru");
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
data.Close();
reader.Close();
Console.ReadLine();

Первый вопрос: программка выводит в консоли содержимое страницы ya.ru со всеми тэгами. Как сделать, чтобы выводилось только, например, надпись "Сделать стартовой" (надпись в левом верхнем углу ya.ru)?
Второе: у меня такое складывается ощущение, что в консоле выводится не все содержимое html страницы. Ибо смотря на код страницы, то можно увидеть что чего-то не хватает? Понять не могу, это из-за того, что код не помещается в переменную string s или есть другая причина?
Спасибо.

Это сообщение отредактировал(а) Georgich - 25.6.2009, 22:33
PM MAIL   Вверх
diadiavova
Дата 26.6.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Записи можно получить с помощью SgmlReader, а несоответствия могут иметь место из-за того, что неполный документ (например без корневого тега html) браузер обычно дополняет. Надо смотреть в чём конкретно несоответствие. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Georgich
Дата 5.7.2009, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Ку, diadiavova.
Цитата(diadiavova @  26.6.2009,  00:43 Найти цитируемый пост)
Надо смотреть в чём конкретно несоответствие.

Ну вот попробуйте создать консольное приложение, вбить код, который я привел, только вместо
Код

Stream data = client.OpenRead("http://www.ya.ru");

вписать
Код

Stream data = client.OpenRead("http://ifolder.ru/6565963");

или любую другую ссылку на ifolder. Затем запустить программу и вы увидите, что выводится не весь код. Даже не могу понять по какому принципу он "выдерает" блок кода из страницы. В приведенном примере с ifolder там нет ни начала html документа, ни конца. Просто выдран код из середины страницы.
Объясните, пожалуйста.
PM MAIL   Вверх
diadiavova
Дата 5.7.2009, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Я же в предыдущем посте как раз именно об этом и сказал. С сервера документ может прийти в неполном виде, а полным его делает уже браузер. Вот простой пример. Создаём документ следующего содержания
Код

<marquee style="font-size:60px;color:red;">
Превед
</marquee>

Открываем его в браузере(в моём случае МозилаФайрфокс) и сохраняем. После сохранения новый документ будет выглядеть так
Код

<html><head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251"></head><body><marquee style="font-size: 60px; color: red;">Превед</marquee></body></html>


Добавлено через 1 минуту и 58 секунд
То есть никто ничего не выдирает. С сервера зачастую документы приходят именно в таком виде.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Georgich
Дата 5.7.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 20.1.2008

Репутация: нет
Всего: нет



Ну понятно, что браузер (в вашем случае Firefox) вставит служебные тэги, в моем случае (Opera) при сохранении ничего не вставляет. Дело в другом, как браузер может вставить, например, кусок текста, который написан на странице?
Допустим есть код:
Код

<p>Привет, Петя!</p>
<p>Я пишу тебе письмо из Урюпинска.</p>
<p>Мы с тобой учились в одной школе.</p>
<p>The End.</p>

и после прогона этой программой на выходе имеем, например, такое:
Код

<p>Мы с тобой учились в одной школе.</p>
<p>The End.</p>

Откуда браузер возьмет первые два абзаца? Вот проблема в чем. Попробуйте это в программе и увидите.
PM MAIL   Вверх
diadiavova
Дата 5.7.2009, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(Georgich @  5.7.2009,  23:02 Найти цитируемый пост)
Дело в другом, как браузер может вставить, например, кусок текста, который написан на странице?

Вообще-то он этого и не делает.

Цитата(Georgich @  5.7.2009,  23:02 Найти цитируемый пост)
и после прогона этой программой на выходе имеем, например, такое:

Ну тут в общем то вопрос принципиальный "имеем" или "имеем, например". Такого быть не должно. Из чего вообще следует, что на сервере есть эти 2 абзаца? Если их нет в документе, но они отображаются в браузере - значит они генерятся динамически, при помощи скрипта например. Вариантов вообще-то много. Надо смотреть что ещё к странице подключено. 

ЗЫ
А опера при сохранени действительно ничего не вставляет, а IE вставляет


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.