На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Учимся парсить сайты на C#: часть 1


Данная статья первая из цикла "Парсим сайты на C#". В ней мы научимся непосредственно подключаться к выбранному серверу, скачивать страничку, разбирать её исходный код, а также выводить на экран первоначальные результаты и записывать их в файл. В следующих статьях программа будет улучшаться и обрастать другими функциями. В итоге попробуем сделать самое настоящее приложение - парсер для сайтов самостоятельно.

Итак, начнем мы с того, что научимся получать страничку. В данном случае пациентом выступает рейтинг топ майл ру, конкретно страница с адресом "top.mail.ru/Rating/Computers-Programming/Today/Visitors/4.html" - именно в этом ареале в настоящий момент обитает мой блог. Эту страницу мы скачиваем, ищем на ней адрес "upread.ru" (парсим) и выводим место, на котором данный сайт. Одновременно, с интервалом в 10 минут пишем этот результат в файл. На выходе будет примерно такая картинка.



А вот и сам код программы:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;

namespace Parser
{
    public partial class Form1 : Form
    {

        string[] mass = new string[1400];
        string line;       
        int k = 0;
        int numberPosition = 0;

        public Form1()
        {
            InitializeComponent();
        }

        public void Run() {
            int i = 0;
            WebClient client = new WebClient();
            client.Encoding = Encoding.GetEncoding(1251);
            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("https://top.mail.ru/Rating/Rest-Reading/Today/Visitors/3.html");
            StreamReader reader = new StreamReader(data, Encoding.GetEncoding(1251));
            while ((line = reader.ReadLine()) != null)
            {
                line = reader.ReadLine();
                mass[i] = line;
                i++;
            }
            data.Close();
            reader.Close();

            for (int j = 0; j < i - 5; j++)
            {
                if (mass[j].IndexOf("upread.ru") >= 0) k = j;
            }

            line = mass[k].Trim();
            line = line.Substring(39, 3);
            numberPosition = Convert.ToInt32(Regex.Replace(line, @"[^\d]+", ""));
            label1.Text = Convert.ToString("Позиция: "+numberPosition + " Время: " +System.DateTime.Now.ToLongTimeString());

            using (System.IO.StreamWriter file = new System.IO.StreamWriter(@"C:\child\stat.txt", true))
            {
                file.WriteLine("Позиция: " + numberPosition + " Время: " + System.DateTime.Now.ToLongTimeString());
            }       
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Timer t = new Timer();
            t.Interval = 600000;
            t.Tick += (timer, arguments) => Run();
            t.Start();        
        }
    }
}
Несколько комментариев по коду выше. В строках 30-32 создаем WebClient; далее открываем поток для чтения данных. Обращаем внимание на строку 34 - здесь задается кодировка скачиваемой страницы. В 35-40 строках в цикле считываем построчно документ в массив. Далее, не забыв закрыть соединение, проходим весь массив и ищем соответствие (вхождение подстроки в строку) с помощью специального оператора си шарп - IndexOf(). В найденной элементе массива убираем пробелы (строка номер 49) и вырезаем номер позиции. Далее в строке 51 конвертируем результат в Int - это нам пока не надо, но далее в развитии функционала программы понадобится.

Строки 54-57 записывают номер позиции и время в файл, а строках 62-65 создаем и сразу запускаем (после загрузки формы) таймер с интервалом в 10 минут. Вот так мы создали простейший парсер страниц на си шарп. Продолжение следует...




тегистатьи IT, си шарп, интернет, парсинг

Читайте также:




Почему MySQLi лучше MySQL?
Вечер 2, Соната 2, Вечер 1


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.