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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Верный способ извлечения ссылок и картинок из html, href и src 
:(
    Опции темы
Softaz
Дата 28.12.2006, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Вот способ доставания из WebBrowser. Вроде бы работает. Может есть способ красивей и проще?

Картинки
Код

        private string[] GetImageUrls(WebBrowser wb)
        {
            if (wb.Document != null)
            {
                HtmlDocument doc = wb.Document;
                string[] urls = (string[])Array.CreateInstance(Type.GetType("System.String"), doc.Images.Count);
                int i = 0;
                foreach (HtmlElement imgElement in doc.Images)
                {
                    urls[i] = imgElement.GetAttribute("src");
                    i++;
                }
                return (urls);
            }
            else
            {
                return (new string[0]);
            }
        }


Ссылки
Код

        private string[] GetLinksUrls(WebBrowser wb)
        {
            if (wb.Document != null)
            {
                HtmlDocument doc = wb.Document;
                string[] urls = (string[])Array.CreateInstance(Type.GetType("System.String"), doc.Links.Count);
                int i = 0;
                foreach (HtmlElement aElement in doc.Links)
                {
                    urls[i] = aElement.GetAttribute("href");
                    i++;
                }
                return (urls);
            }
            else
            {
                return (new string[0]);
            }
        }



--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
Дрон
Дата 28.12.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

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



Цитата(Softaz @  28.12.2006,  14:29 Найти цитируемый пост)
string[] urls = (string[])Array.CreateInstance(Type.GetType("System.String"), doc.Images.Count);

Фигасе!  smile  smile  smile  smile  smile 

Интересно, какая религия запрещает сделать:
Код
string[] urls = new string[doc.Images.Count];

smile

И вообще лучше использовать не массив, а список: ArrayList или List<string>.

Это сообщение отредактировал(а) Дрон - 28.12.2006, 15:40


--------------------
Да. Именно так.
PM   Вверх
Softaz
Дата 28.12.2006, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


wasm
**


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

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



Цитата(Дрон @  28.12.2006,  15:40 Найти цитируемый пост)
Фигасе!           

Это из... MSDN взят от сих до сих.

Говоря "красивее" я имел ввиду смену алгоритма нахождения ссылок и картинок. Не люблю WebBrowser, а с регулярными целый лес надо городить smile 


--------------------
Разочарованный в .NET
PM MAIL WWW   Вверх
ivashkanet
Дата 28.12.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Цитата(Softaz @  28.12.2006,  13:29 Найти цитируемый пост)
Вот способ доставания из WebBrowser. Вроде бы работает. Может есть способ красивей и проще?

А что тебе не нравится? Все вроде нормуль. Можно 
Цитата(Дрон @  28.12.2006,  14:40 Найти цитируемый пост)
И вообще лучше использовать не массив, а список: ArrayList или List<string>.

Тогда будет еще и красивше smile

Код

  private List<string> GetImageUrls(WebBrowser wb)
        {
            if (wb.Document != null)
            {
                HtmlDocument doc = wb.Document;
                List<string> urls = new List<sting>(doc.Images.Count);

                foreach (HtmlElement imgElement in doc.Images)
                    urls.Add(imgElement.GetAttribute("src"));
              
                return (urls);
            }
            else
            {
                return (new null);
            }
        }


Это сообщение отредактировал(а) ivashkanet - 28.12.2006, 16:54
PM MAIL WWW ICQ   Вверх
Yama
Дата 29.12.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(ivashkanet @ 28.12.2006,  16:53)
Цитата(Softaz @  28.12.2006,  13:29 Найти цитируемый пост)
Вот способ доставания из WebBrowser. Вроде бы работает. Может есть способ красивей и проще?

А что тебе не нравится? Все вроде нормуль. Можно 
Цитата(Дрон @  28.12.2006,  14:40 Найти цитируемый пост)
И вообще лучше использовать не массив, а список: ArrayList или List<string>.

Тогда будет еще и красивше smile

Код

  private List<string> GetImageUrls(WebBrowser wb)
        {
            if (wb.Document != null)
            {
                HtmlDocument doc = wb.Document;
                List<string> urls = new List<sting>(doc.Images.Count);

                foreach (HtmlElement imgElement in doc.Images)
                    urls.Add(imgElement.GetAttribute("src"));
              
                return (urls);
            }
            else
            {
                return (new null);
            }
        }

угу...
а это для ссылок smile
Код

public String[] getUrls(HtmlDocument hDoc){
            if (hDoc == null) throw new NullReferenceException(); //или "return null;" , что то же логично :)
            int i = 0;
            String[] s = new String[hDoc.Links.Count];
            foreach (HtmlElement link in hDoc.Links)
            {
                s[i] = link.OuterHtml;
                i++;
            }
         return s;
        }


Добавлено @ 12:23 
В догонку:
посмотри еще это
Код

String []sclick=new String[hDoc.All.Count];
            int i = 0;
            foreach (HtmlElement e in hDoc.All) {
//потому что очень много реальных ссылок
//идут по onckick, а не как <a href=.....> 
//а свойство Links берет только <a ....
                if (e.GetAttribute("ONCKLICK") != "")                 {
                    sclick[i] = e.OuterHtml;
                }

            }

но как это работает, еще не проверял, сорри, времени нет.
Как руки дойдут - проверю и напишу, что получаетцца smile .

Это сообщение отредактировал(а) Yama - 29.12.2006, 12:28
--------------------
Если бы строители строили дома так же, как программисты пишут программы, то первый же залетевший в форточку дятел разрушил бы всю нашу цивилизацию.
PM MAIL   Вверх
ivashkanet
Дата 29.12.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

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



Цитата(ivashkanet @  28.12.2006,  15:53 Найти цитируемый пост)
 return (new null);

Эт я такое написал  smile 
Убейте меня ап стену smile

Нужно либо просто null (а потом его обрабатывать), либо new List<string>  smile 
PM MAIL WWW ICQ   Вверх
Exception
Дата 30.12.2006, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Yama @  29.12.2006,  13:13 Найти цитируемый пост)
Код

            foreach (HtmlElement e in hDoc.All) {
//потому что очень много реальных ссылок
//идут по onckick, а не как <a href=.....> 
//а свойство Links берет только <a ....
                if (e.GetAttribute("ONCKLICK") != "")                 {
                    sclick[i] = e.OuterHtml;


Во-первых, не ONCKLICK, а onclick.
Во-вторых, это не ссылки smile . Это JavaScript, так что из него всё равно фиг что-то вытянешь.

Добавлено @ 15:27 
Цитата(ivashkanet @  29.12.2006,  13:26 Найти цитируемый пост)
Нужно либо просто null (а потом его обрабатывать), либо new List<string> 


Лучше пустой список, т.к. меньше вероятности потом "напороться" на null.
PM   Вверх
DarkDragon
Дата 31.12.2006, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GradVin
**


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

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



а вот о таком слышали:

<img id="img_01">

<script language="javascript">
   img_01.href = "image01.jpg";
</script>

или о вот таком:

<div style="BACKGROUND-IMAGE=url(backimg.gif)">Здрасти Новый Год</div>

Думаю Регулярные выражения самый раз чтобы забазарить и такие способы линковки smile
PM MAIL   Вверх
Exception
Дата 31.12.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Это слишком экзотично. Может тогда просто ловить "по расширению"? Как встретится (.jpg|.gif|.swf|.png|.htm|.html|...), так и выдираем путь smile ?
PM   Вверх
setnull
Дата 26.8.2008, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А существует способ на основе имеющегося HTML кода создать экземпляр HTMLDocument, не прибегая к помощи WebBrowser (как то: сохранить код в файл; открыть его броузером и т.д.)?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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