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

Поиск:

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


Новичок



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

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



рограмма парсинга.
Парсит странички,выберая нужный текст и сохраняет в файл csv.
Сделал:
1 перебирает все странички с нужной инфой по ссылкам на след страницы.
2заходит по ссылкам в описание нужного объекта для вытаскивания инфы.
3парсит нужную инфу
4сохраняет инфу 
код классе
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HtmlAgilityPack;
using System.Net;
using System.IO;

namespace Console_Parser

    class Parser
    {
        string url = "http://www.057.ua/dosug/446";
        // Свойство класса 
       public string URL 
        { 
            set { url = value;}
            get { return url;}
        }
        public static string LoadWebPage(string url)// метод загрузки всех страниц
        {
            try
            {
                WebRequest reqGET = System.Net.WebRequest.Create(url);
                System.Net.WebResponse resp = reqGET.GetResponse();
                Stream stream = resp.GetResponseStream();
                StreamReader sr = new StreamReader(stream, Encoding.GetEncoding(65001));
                string s = sr.ReadToEnd();
                return s;
            }
            catch
            {
                return string.Empty;
            }
        }
       public void ParseLink(string url)
        {
            string s = LoadWebPage(url);
            HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
            doc.LoadHtml(s);
            HtmlNodeCollection C = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']//td[@valign='top']/h2/a");
            if (C != null)
            {
                foreach(HtmlNode n in C)
                {
                    if (n.Attributes["href"] != null)
                    {
                        string u = s + n.Attributes["href"].Value;
                        string cafe_opisanie = LoadWebPage(u);
                        HtmlAgilityPack.HtmlDocument d = new HtmlDocument();
                        d.LoadHtml(cafe_opisanie);
                        HtmlNodeCollection Names = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']//table//tr//td[@valign='top']//h2");//1
                        //HtmlNodeCollection Names = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']//*//td[@valign='top']//h2");//2
                        
                        List<string> Cafe = new List<string>();
                        if (Names != null)
                        {
                            for (int y = 0; y < Names.Count; y++) // заполняет все три коллекции
                            {
                                //Cafe.Add(Reyt[y].InnerText);
                                 Cafe.Add("Название " + Names[y].InnerText);
                                //Cafe.Add(streetsandphone[y].InnerText);
                            }

                        }
                        Save(Cafe); 
                    }

                }
                
            }
            
        }
       public static void Save(List<string> Cafe)
        {
            string[] txtmas = new string[Cafe.Count];
            for (int y = 0; y < Cafe.Count; y++)
            {
                txtmas[y] = string.Format(Cafe[y]);
            }
            StreamWriter SW = File.AppendText(@"E:\Projects\Parser\Console_Parser+strani4kiopisanie\1.csv");
            SW.Flush();
           SW.WriteLine("#File_adres_names_phones");
            for (int y = 0; y < txtmas.Length; y++)
            {
                SW.WriteLine(txtmas[y]);
            }
            SW.Close();
        }

      public IEnumerable<string> GetUrls(string url ="") 
        {
            if (url == "") /
            {
                url = this.url;
            }
                HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
                doc.LoadHtml(LoadWebPage(url));// загружаем страницу из параметра url
                foreach (HtmlNode link in doc.GetElementbyId("paginationControl").ChildNodes)
                {
                    if (link.Name == "a")// если содержит атрибут "a"
                    {
                        yield return link.GetAttributeValue("href", string.Empty);
                    }
                }
          // Отладка висуал студио .
            
        }

    }
}


выполняющий код
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace Console_Parser
{
    class Program
    {

        static void Main(string[] args)
        {
            Parser WorkParser = new Parser();
            Console.WriteLine("Begin work");
            Console.WriteLine("Connect to url");
            Console.WriteLine("Begin Parse");
            WorkParser.ParseLink(@"http://www.057.ua/dosug/446/");
            foreach (string link in WorkParser.GetUrls(@"http://www.057.ua/dosug/446"))
            {
                WorkParser.ParseLink(string.Concat(@"http://www.057.ua", link));
            }
            Console.WriteLine("Parse done");
            Console.WriteLine("Saving to file");
            Console.WriteLine("WorkDone");
            Console.WriteLine("To Exit Please enter -q-");
            Console.ReadKey();
        }
    }
}

проблема -  записывает информацию о назваии кафе (пока не выключаю программу) только из первой странички
если комментирую код парсинга первой странички
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;


namespace Console_Parser
{
    class Program
    {

        static void Main(string[] args)
        {
            Parser WorkParser = new Parser();
            Console.WriteLine("Begin work");
            Console.WriteLine("Connect to url");
            Console.WriteLine("Begin Parse");
            ////////WorkParser.ParseLink(@"http://www.057.ua/dosug/446/");
            foreach (string link in WorkParser.GetUrls(@"http://www.057.ua/dosug/446"))
            {
                WorkParser.ParseLink(string.Concat(@"http://www.057.ua", link));
            }
            Console.WriteLine("Parse done");
            Console.WriteLine("Saving to file");
            Console.WriteLine("WorkDone");
            Console.WriteLine("To Exit Please enter -q-");
            Console.ReadKey();
        }
    }
}


то записывает информацию о назваии кафе (пока не выключаю программу) только из второй странички
помогите решить проблему.Спасибо.


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Console_Parser_strani4kiopisanie1.rar 163,32 Kb
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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