Доброго времени суток! Есть у меня такая задача, нужно "выдрать"/достать/извлечь конкретную область сайта(в моем случае это сайт deviantart). Что я имею ввиду по словами "выдрать"/достать/извлечь конкретную область сайт? Т.е. необходимо чтобы любая часть/блок сайта, допустим блок с фотографиями, отображался у меня в WebBrowser. И чтобы там были именно только фотографии конкретного блока и ничего больше. Либо допустим, только блок с комментариями. Пример: 1. 2. Вот 1. это сайт, главная страница, а 2., то что нужно достать... Использовать пытаюсь Data Extracting SDK. И вот так: Code: HtmlProcessor proc = new HtmlProcessor(new UriHtmlProcessor("http://www.deviantart.com/").DocumentSource); var divs = proc.Body.GetDomElements("div").Where(div => div.Class == "tt.a"); foreach(var div in divs) { var images = div.GetDomElements("img"); } Возможно кто-то работал уже с данной SDK. Посоветуйте пожалуйста как это сделать? Потому что уже не знаю как и что. Запустался. Либо может каким-то стандартными путями... Заранее благодарю.
string URL = "http://google.ru"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Timeout = 999999999; string data = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();
Чтоб не создавать ещё 1 тему, не кто не подскажет как со string переменной можно убрать все дубли (повторные слова)? P.S ТС сорри за оффтоп.
в этом примере он паказал, как получить исходник страницы. его ты и можешь пропарсить regex. Code: string newString = string.Join(" ", oldString.Split(new char[1] { ' ' }).Distinct().Select(s => s.ToString()).ToArray())+"\nthat's why i love c# :)";
Code: class html_parser { private string text = null; public void setText(string text) { this.text = text; } public string getImg() { var image = "no_image.png"; var s_text = "<img src='"; var e_text = "' alt='"; if (text.IndexOf(s_text) != -1) { int c = (text.IndexOf(s_text) + s_text.Length); image = text.Substring(c, (text.IndexOf(e_text, c) - c)); } return image; } }
в html_parser тебе не нужен адрес. ты должен предать функции setText(string text) зачитанный веб-реквестом текст исходника страницы. а как получить текст определённого url стоит на предыдущей странице.
ну не всё так страшно. вот смотри: Code: string URL = "http://www.postimage.org/image.php?v=TsMkyRA"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL); request.Timeout = 1000; string data = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd(); var image = "no_image.png"; var s_text = "<img src='"; var e_text = "' alt='"; if (data.IndexOf(s_text) != -1) { int c = (data.IndexOf(s_text) + s_text.Length); image = data.Substring(c, (data.IndexOf(e_text, c) - c)); } в переменной image ссылка на твою картинку.
Юзайте HtmlAgilityPack и XPath, и будет вам счастье. Регексы - тока на крайняк я использую. WebBrowser вообще лучше выбросить, нормальные проекты на нем не поднять (хотя бы потому что потоки он не держит)
Вот мне тоже советовали, но как ими пользоватся разобратся не могу. Если Вас не затруднит, помогите пожалуйста.
Ну что то вроде: Code: HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); //html - строка с разметкой, полученная, например, HttpWebRequest'ом HtmlNode inputNode= doc.DocumentNode.SelectSingleNode("//input[@name='username']"); Здесь мы сделали объект HtmlDocument, с которым можно обращаться с помощью XPath, и далее вытащили икспафом ноду (примерно такую: <input name="username"...</input>). Подробнее лучше посмотреть у W3C, там большая дока по XPath.