Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2014, 20:15   #1
ShadowInject
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 37
По умолчанию Парсинг страницы

Отправляю пост запрос на страницу с последующим редиректом. Далее получаю код страницы. Нужно спарсить данные из кода. чем лучше всего это сделать ? И как это делается ? Только начал осваивать пост запросы
Код:
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Forms;
 
namespace mysitecost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Создать запрос с использованием URL
            WebRequest request = WebRequest.Create("http://mysitecost.ru/");
            // Установите свойство метода запроса в POST.
            request.Method = "POST";
            // Создать данные POST и преобразовать его в массив байтов.
            string postData = "domain="+ textBox1.Text +"&act=calculate";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Установите свойство ContentType в WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Установите свойство ContentLength в WebRequest
            request.ContentLength = byteArray.Length;
            // Создаем поток запроса.
            Stream dataStream = request.GetRequestStream();
            // Записываем данные в поток
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Закрываем поток
            dataStream.Close();
            // Получаем ответ
            WebResponse response = request.GetResponse();
            // Отображаем статус
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Получаем содержимое потока, возращемый сервером
            dataStream = response.GetResponseStream();
            // Откройте поток, используя StreamReader для легкого доступа.
            StreamReader reader = new StreamReader(dataStream);
            // Читаем содержимое
            string responseFromServer = reader.ReadToEnd();
            // Отображаем содержимое
            textBox2.Text = responseFromServer;
            // Очищаем поток
            reader.Close();
            dataStream.Close();
            response.Close();
        }
    }
}
Вот попробывал с помощью регулярок, но при запуске ничего не отображается в текстбокс

Код:
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;
 
namespace mysitecost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Создать запрос с использованием URL
            WebRequest request = WebRequest.Create("http://mysitecost.ru/");
            // Установите свойство метода запроса в POST.
            request.Method = "POST";
            // Создать данные POST и преобразовать его в массив байтов.
            string postData = "domain="+ textBox1.Text +"&act=calculate";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Установите свойство ContentType в WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Установите свойство ContentLength в WebRequest
            request.ContentLength = byteArray.Length;
            // Создаем поток запроса.
            Stream dataStream = request.GetRequestStream();
            // Записываем данные в поток
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Закрываем поток
            dataStream.Close();
            // Получаем ответ
            WebResponse response = request.GetResponse();
            // Отображаем статус
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Получаем содержимое потока, возращемый сервером
            dataStream = response.GetResponseStream();
            // Откройте поток, используя StreamReader для легкого доступа.
            StreamReader reader = new StreamReader(dataStream);
            // Читаем содержимое
            string responseFromServer = reader.ReadToEnd();
            // Отображаем содержимое
            //textBox2.Text = responseFromServer;
            string patern = "<meta property=\"og:title\" content=\"(.*)\" />'";
            Match result;
            result = Regex.Match(responseFromServer, patern);
            textBox2.Text = result.ToString();
            // Очищаем поток
            reader.Close();
            dataStream.Close();
            response.Close();
        }
    }
}
ShadowInject вне форума Ответить с цитированием
Старый 16.11.2014, 20:30   #2
ShadowInject
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 37
По умолчанию

Все вывело, но вместе с тегами, а нужно именно текст между тегов
Код:
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace mysitecost
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Создать запрос с использованием URL
            WebRequest request = WebRequest.Create("http://mysitecost.ru/");
            // Установите свойство метода запроса в POST.
            request.Method = "POST";
            // Создать данные POST и преобразовать его в массив байтов.
            string postData = "domain="+ textBox1.Text +"&act=calculate";
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            // Установите свойство ContentType в WebRequest.
            request.ContentType = "application/x-www-form-urlencoded";
            // Установите свойство ContentLength в WebRequest
            request.ContentLength = byteArray.Length;
            // Создаем поток запроса.
            Stream dataStream = request.GetRequestStream();
            // Записываем данные в поток
            dataStream.Write(byteArray, 0, byteArray.Length);
            // Закрываем поток
            dataStream.Close();
            // Получаем ответ
            WebResponse response = request.GetResponse();
            // Отображаем статус
            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            // Получаем содержимое потока, возращемый сервером
            dataStream = response.GetResponseStream();
            // Откройте поток, используя StreamReader для легкого доступа.
            StreamReader reader = new StreamReader(dataStream);
            // Читаем содержимое
            string responseFromServer = reader.ReadToEnd();
            // Отображаем содержимое
            //textBox2.Text = responseFromServer;
            string patern = "title\" content=(.*?) />";
            Match result;
            result = Regex.Match(responseFromServer, patern);
            textBox2.Text = result.ToString();
            // Очищаем поток
            reader.Close();
            dataStream.Close();
            response.Close();
        }
    }
}
ShadowInject вне форума Ответить с цитированием
Старый 16.11.2014, 20:34   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Вот попробывал с помощью регулярок
Обычно лучше библиотеку типа HtmlAgilityPack взять. http://htmlagilitypack.codeplex.com/ (через NuGet в проект установите)

Код:
            string html = ...;

            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(html);

            var node = htmlDoc.DocumentNode.SelectSingleNode("//meta[@property='og:title' and @content]");

            if (node != null)
            {
                MessageBox.Show(node.OuterHtml);
                MessageBox.Show(node.Attributes["content"].Value);
            }
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 09.04.2016 в 14:50.
Alex11223 вне форума Ответить с цитированием
Старый 16.11.2014, 20:38   #4
ShadowInject
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Обычно лучше библиотеку типа HtmlAgilityPack взять. http://htmlagilitypack.codeplex.com/ (через NuGet в проект установите)

Код:
            string html = ...;

            var htmlDoc = new HtmlAgilityPack.HtmlDocument();
            htmlDoc.LoadHtml(html);

            var node = htmlDoc.DocumentNode.SelectSingleNode("//meta[@property='og:title' and @content]");

            if (node != null)
            {
                MessageBox.Show(node.OuterHtml);
                MessageBox.Show(node.Attributes["content"].Value);
            }
Как всегда огромное спасибо. Опробую

Последний раз редактировалось Alex11223; 09.04.2016 в 14:51.
ShadowInject вне форума Ответить с цитированием
Старый 18.11.2014, 14:38   #5
ShadowInject
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Обычно лучше библиотеку типа HtmlAgilityPack взять. http://htmlagilitypack.codeplex.com/ (через NuGet в проект
А можно код прокоментировать ? Я ни че понять не могу. прочитал кучу информации про эту либу, а как она работает не пойму. Не пойму по какому принципу строинтся выражения для парсинга. НАшел 1 ману http://blog.baskovsky.ru/2012/11/html-agility-pack.html но и там не описано

Последний раз редактировалось Alex11223; 09.04.2016 в 14:51.
ShadowInject вне форума Ответить с цитированием
Старый 18.11.2014, 14:41   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Этот язык запросов называется XPath, почитайте что-нибудь про него или погуглите примеры.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 18.11.2014, 14:57   #7
ShadowInject
Пользователь
 
Регистрация: 08.11.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Этот язык запросов называется XPath, почитайте что-нибудь про него или погуглите примеры.
Спасибо за информацию. Ушел гуглить
ShadowInject вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг страницы demiancz JavaScript, Ajax 3 10.11.2012 11:09
Парсинг страницы record222 Общие вопросы Delphi 1 28.06.2012 14:45
Парсинг страницы Зод Работа с сетью в Delphi 6 16.11.2011 20:42
Парсинг страницы Terikon Общие вопросы Delphi 3 04.04.2009 00:32
парсинг страницы seoanalyzer Общие вопросы Delphi 3 13.02.2009 12:50