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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 11:57   #1
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию [C#] Пoмoщь с парсером

Доброго времени суток, вот понадобилось пропарсить страницу сайта http://chatmaniac.ru/, чтобы в итоге стало "номер вопроса|сам вопрос|ответ", но никак не получается, вот что пытался сделать
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Windows.Forms;

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

        private void button1_Click(object sender, EventArgs e)
        {
            WebRequest Request = WebRequest.Create(@"http://chatmaniac.ru/");
            StreamReader StrReader = new StreamReader(Request.GetResponse().GetResponseStream(), Encoding.GetEncoding(1251));
            string text = StrReader.ReadToEnd();

            foreach (string str in text.Split(new string[] { "<tr class=\"tr_normal\" onmouseover=\"this.className='tr_hover';\" onmouseout=\"this.className='tr_normal';\">", "</tr>" }, StringSplitOptions.None))
            {
                if (str.Contains("<td width=\"30\" style=\"text-align:center;\">"))
                {
                    richTextBox1.Text += str.Split(new string[] { "<td width=\"30\" style=\"text-align:center;\">", "</td>" }, StringSplitOptions.None)[1] + "|";
                }
                if (str.Contains("<td>"))
                {
                    richTextBox1.Text += str.Split(new string[] { "<td>", "</td>" }, StringSplitOptions.None)[1] + "|";
                }
            }
        }

    }
}
Но не работает, можете помочь сделать хотя бы чтобы парсило в вид "номер вопроса|сам вопрос", а с остальным разберусь.
Зарание спасибо за ответ.

Последний раз редактировалось JonMagon; 08.02.2012 в 12:00.
JonMagon вне форума Ответить с цитированием
Старый 08.02.2012, 13:11   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

JonMagon

пропарсить страницу сайта http://chatmaniac.ru/

примерно так:

Код:
private static readonly Regex rx1 = new Regex(@"<td\sstyle=\""text-align:\scenter;\""\swidth=\""30\"">(\d+)<\/td>[^<]*?<td>([^<]+)<\/td>[^<]*<td>([^<]+?)(?:\r?\n)*<\/td>", RegexOptions.Compiled);

void f()
{
	var s = html-контент;
	foreach (Match m in rx1.Matches(s))
	{
		Console.WriteLine("{0}|{1}|{2}", m.Groups[1], m.Groups[2], m.Groups[3]);
	}
}
Rififi вне форума Ответить с цитированием
Старый 08.02.2012, 15:44   #3
JonMagon
Форумчанин
 
Регистрация: 07.04.2011
Сообщений: 152
По умолчанию

Rififi, спасибо большое, чуть переделал и все заработало. Как я могу отблагодарить вас?
JonMagon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа Пoмoщь! ТосяЭтоЯ Общие вопросы C/C++ 6 18.05.2011 12:18
Проблема с парсером ckopnio PHP 11 01.11.2010 17:05