Просмотр полной версии : "Выдрать" конкретную часть сайта на C#
Доброго времени суток!
Есть у меня такая задача, нужно "выдрать"/достать/извлечь конкретную область сайта(в моем случае это сайт deviantart). Что я имею ввиду по словами "выдрать"/достать/извлечь конкретную область сайт?
Т.е. необходимо чтобы любая часть/блок сайта, допустим блок с фотографиями, отображался у меня в WebBrowser. И чтобы там были именно только фотографии конкретного блока и ничего больше. Либо допустим, только блок с комментариями.
Пример:
1.
http://www.postimage.org/image.php?v=PqqZfqJ
2.
http://www.postimage.org/image.php?v=TsMkyRA
Вот 1. это сайт, главная страница, а 2., то что нужно достать...
Использовать пытаюсь Data Extracting SDK.
И вот так:
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. Посоветуйте пожалуйста как это сделать? Потому что уже не знаю как и что. Запустался.
Либо может каким-то стандартными путями...
Заранее благодарю.
Стандартные пути:
IndexOf, Remove, ...
+ Regex
Стандартные пути:
IndexOf, Remove, ...
+ Regex
Спасибо.
А можно маленький пример?
assume[C3]
19.05.2010, 18:21
string URL = "http://google.ru";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Timeout = 999999999;
string data = new StreamReader(request.GetResponse().GetResponseStre am()).ReadToEnd();
assume[C3]
19.05.2010, 18:29
Чтоб не создавать ещё 1 тему, не кто не подскажет как со string переменной можно убрать все дубли (повторные слова)?
P.S ТС сорри за оффтоп.
']string URL = "http://google.ru";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Timeout = 999999999;
string data = new StreamReader(request.GetResponse().GetResponseStre am()).ReadToEnd();
Что-то не совсем понятно.
Не уже ли я настолько далекий... :(
BrainDeaD
20.05.2010, 20:01
Что-то не совсем понятно.
Не уже ли я настолько далекий... :(
в этом примере он паказал, как получить исходник страницы. его ты и можешь пропарсить regex.
']Чтоб не создавать ещё 1 тему, не кто не подскажет как со string переменной можно убрать все дубли (повторные слова)?.string newString = string.Join(" ", oldString.Split(new char[1] { ' ' }).Distinct().Select(s => s.ToString()).ToArray())+"\nthat's why i love c# :)";
в этом примере он паказал, как получить исходник страницы. его ты и можешь пропарсить regex.
Я правильно понял - это оно (http://msdn.microsoft.com/ru-ru/library/6f7hht7k(v=VS.90).aspx)?!
BrainDeaD
20.05.2010, 21:00
да, правильно. с его помощью ты можешь искат
регулярные выражения и выбирать тебе нужные.
да, правильно. с его помощью ты можешь искат
регулярные выражения и выбирать тебе нужные.
Ну что ж.. попробую.
Спасибо.
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;
}
}
Спасибо =)
Попробую и это. ;)
Глупый вопрос - а куда вводить адрес сайта?!
BrainDeaD
31.05.2010, 13:47
в html_parser тебе не нужен адрес. ты должен предать функции setText(string text) зачитанный веб-реквестом текст исходника страницы. а как получить текст определённого url стоит на предыдущей странице.
в html_parser тебе не нужен адрес. ты должен предать функции setText(string text) зачитанный веб-реквестом текст исходника страницы. а как получить текст определённого url стоит на предыдущей странице.
Как же всё это кажется нереально СЛОЖНЫМ... и это всего на 3-й месяц изучения C# :(
BrainDeaD
31.05.2010, 18:37
ну не всё так страшно. вот смотри:
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().GetResponseStre am()).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 вообще лучше выбросить, нормальные проекты на нем не поднять (хотя бы потому что потоки он не держит)
Юзайте HtmlAgilityPack и XPath, и будет вам счастье. Регексы - тока на крайняк я использую. WebBrowser вообще лучше выбросить, нормальные проекты на нем не поднять (хотя бы потому что потоки он не держит)
Вот мне тоже советовали, но как ими пользоватся разобратся не могу. Если Вас не затруднит, помогите пожалуйста.
Ну что то вроде:
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.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot