Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парсинг конкретная задача, конкретная задача 
:(
    Опции темы
ForzaMetall
Дата 29.7.2012, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.7.2012

Репутация: нет
Всего: нет



Здравствуйте!Помогите!
Задача
сайт - http://www.057.ua/dosug/446
нужно взять информацию о кафе и барах с первой по последнюю страницы
Название,адрес,телефон и вывести в ричбокс с последующим сохранением в csv.
все что я самостоятельно смог осилить проект в архиве
Помогите пожалуйста!

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  FormParser.rar 58,38 Kb
PM MAIL   Вверх
Тигер
Дата 29.7.2012, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



Вам помогут 
System.Net.WebClient  - для загрузки страницы (используйте метод DownloadString)
System.Text.RegularExpressions.Regex - для парсинга (тут правда нужно немного разобраться с регулярными выражениями, но оно того стоит. В msdn довольно понятная дока)

В CSV можно сохранить с помощью обычного StreamWriter'а
в Excel разделитель строк - перенос строки "\n", столбцов - точка с запятой ";"


PM MAIL   Вверх
ForzaMetall
Дата 29.7.2012, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.7.2012

Репутация: нет
Всего: нет



Спасибо,почитаю.
Дело в том что я учусь и это для меня первое серьезное  задание.Очень многое непонятно и большая часть задания мне пока не ясна.Если бы вы могли дополнить мой код с комментариями или переделать его.... Ну 1000 спасибо) 
PM MAIL   Вверх
Тигер
Дата 29.7.2012, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



Да я сам с  C# третий день только )
ну вам впринципе, нужно разобраться только с регулярками, наверное это самый простой способ парсинга. Но в любом случае, разбирать Html не самая тривиальная задача и требует "покопаться" в самом коде страницы, может я попозже посмотрю (или кто-то из форумчан) но у меня сейчас свои непонятки...
PM MAIL   Вверх
crz
Дата 29.7.2012, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 1.6.2007

Репутация: нет
Всего: 1



Разбирать html при помощи регулярных выражений - плохая идея. Лучше воспользоваться библиотекой Html Agility Pack и с ее помощью делать xpath запросы к html коду.
PM MAIL   Вверх
ForzaMetall
Дата 29.7.2012, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.7.2012

Репутация: нет
Всего: нет



до этого задания я писал только -калькулятор и записную книгу.Представления о том что сейчас нужно делать для реализации этого задания практически не имею,за исключением того что сейчас читаю и пытаюсь понять и попробовать.Если бы вы могли дополнить мой код с комментариями или переделать его до рабочего состояния что бы я мог отталкиваясь от комментариев и видя живой рабочий код мог искать нужную инфу,сопоставлять с готовым кодом и на основе этого строить в голове и на деле реальные знания и понимание того что я делаю.Если у вас будет время и желание помочь,буду безмерно благодарен.мне к концу недели нужно сделать.

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  FormParser1.rar 201,70 Kb
PM MAIL   Вверх
ForzaMetall
Дата 29.7.2012, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.7.2012

Репутация: нет
Всего: нет



то что я навоял , качается одна страничка,сохраняется и выводится в ричтекстбокс
Код

  private void BStart_Click(object sender, EventArgs e)
        {
            
            WebRequest webReq = WebRequest.Create("http://www.057.ua/dosug/446");
            WebResponse webRes = webReq.GetResponse();
            Stream st = webRes.GetResponseStream();
            StreamReader sr = new StreamReader(st);
            StreamWriter sw = new StreamWriter(@"E:\Projects\Projects 2\FormParser\1.html");
            string response = sr.ReadToEnd();
            sw.WriteLine(response);
            sr.Close();
            sw.Close();
            richTextBox1.Text = File.ReadAllText(@"E:\Projects\Projects 2\FormParser\1.html");
        }

            private void Bremove_Click(object sender, EventArgs e)
        {
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.Load(@"E:\Projects\Projects 2\FormParser\1.html");

        } 

        } 


Что нужно,что бы качались все 8 страниц и сохранялись в файл для последующей обработки(или как качать не сохраняя,а сразу обрабатывать вытаскивать нужную инфу и только потом сохранять и выводить в ричтекстбокс?)
Как иjavascript:emo_pop();менно вытащить нужную инфу?
вот кусок странички с нужной инфой(обведена красным)
     http://s014.radikal.ru/i328/1207/a4/740b72cedccb.jpg

PM MAIL   Вверх
Тигер
Дата 29.7.2012, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



Цитата

Разбирать html при помощи регулярных выражений - плохая идея.

Разбирать HTML - плохая, а вот грабить контент из HTML - самое то  smile 

Мне в вашем коде немного лень разбираться, но вот небольшой пример как вытащить ссылки => загаловки и последнюю страницу

Код

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.Threading;
using System.Text.RegularExpressions;

namespace FormParser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void BStart_Click(object sender, EventArgs e)
        {
            var wc = new WebClient();
            wc.Encoding = Encoding.UTF8;
            String fp = wc.DownloadString("http://www.057.ua/dosug/446");
            if (!String.IsNullOrEmpty(fp))
            {
                var titlesMatch = Regex.Matches(fp,"<h2>[^<]*<a\\s+href=\"([^\"]+)\"[^>]+title=\"([^\"]+)\"",RegexOptions.IgnoreCase | RegexOptions.Compiled);
                var maxPage = Regex.Match(fp,"<a href=\"[^\"]+/(\\d+)\">\\1</a>[^<]+<\\!\\-\\-");
                if (titlesMatch.Count > 0)
                {
                    String titles="";
                    foreach(Match titleMatch in titlesMatch){
                        titles += titleMatch.Groups[1].Value + " => " + WebUtility.HtmlDecode(titleMatch.Groups[2].Value.Trim()) + "\n";
                    }
                    MessageBox.Show("Загаловки: \n\n"+titles);
                }
                if (maxPage.Success)
                {
                    MessageBox.Show("Последняя страница: "+maxPage.Groups[1].Value);
                }
            }
        }

        private void Bremove_Click(object sender, EventArgs e)
        {

        }

        private void bSave_Click(object sender, EventArgs e)
        {

        }

    }
}


PM MAIL   Вверх
ForzaMetall
Дата 30.7.2012, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.7.2012

Репутация: нет
Всего: нет



Огромное спасибо буду разбираться!
Вопрос -инфа берется с 1й и последней странички в этом коде?Или только с 1й,а последняя просто показывается?Я не понял (
PM MAIL   Вверх
ForzaMetall
Дата 30.7.2012, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 29.7.2012

Репутация: нет
Всего: нет



Код

using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Threading;
using System.Text.RegularExpressions;

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

        private void buttonGo_Click(object sender, EventArgs e)
        {
            for (int i = 0; i <= 8; i++)
            {
                var doc = new HtmlAgilityPack.HtmlDocument();
                WebRequest reqGET = System.Net.WebRequest.Create("http://www.057.ua/dosug/446");
                System.Net.WebResponse resp = reqGET.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(65001));
                string s = sr.ReadToEnd();
                doc.LoadHtml(s);
                HtmlNodeCollection Names = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']/table/tr/td[2]/table/tr/td/h2/a");
                HtmlNodeCollection streetsandphone = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']/table/tr/td[2]/table/tr/td/strong");

                List<string> itognames = new List<string>();
                List<string> itogphones = new List<string>();

                if (Names != null)
                {
                    int j = 0;
                    foreach (HtmlNode c in Names)
                    {
                        itognames.Add(c.InnerText);
                    }
                    foreach (HtmlNode d in streetsandphone)
                    {
                        itogphones.Add(d.InnerText);
                    }
                }
           
            }


что дописать что бы показывало в ричтекстбоксе - itognames + itogphones и также записывало в csv.
Заранее благодарен!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0771 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.