.NET 4.x Парсинг странички, выбор нужного текста и сохранение в файл csv - C#
Формулировка задачи:
программа парсинга.
Парсит странички,выберая нужный текст и сохраняет в файл csv.
Сделал:
1 перебирает все странички с нужной инфой по ссылкам на след страницы.
2заходит по ссылкам в описание нужного объекта для вытаскивания инфы.
3парсит нужную инфу
4 Сохранение - тут ошибка.Программа запускается ,работает,вроде бы как проходит все этапы но в файл пустой.Помогите найти ошибку.
код класса:
Код выполнения:
ошибка я так подозреваю где то в методе public void ParseLink(string url) но какая именно не знаю.
Листинг программы
- 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 Reyt = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']//p[@class='small_3']/strong");
- HtmlNodeCollection Names = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']//tbody//td[@valign='top']//h2");
- // HtmlNodeCollection streetsandphone = doc.DocumentNode.SelectNodes(@".//*[@id='all_body']//td[@valign='top']/strong");
- 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(@"bla bla bla 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)
- {
- Console.WriteLine("Begin work");
- Parser WorkParser = new Parser();
- Console.WriteLine("Connect to url");
- WorkParser.ParseLink(@"http://www.057.ua/dosug/446/");
- Console.WriteLine("Begin Parse");
- 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();
- }
- }
- }
Решение задачи: «.NET 4.x Парсинг странички, выбор нужного текста и сохранение в файл csv»
textual
Листинг программы
- Наименование:кафе Cinema, доставка обедов, заказ пиццы, суши, десерты, торты на заказ
- Адрес:улица Пушкинская, 22
- Сайт:http://www.cinema-cafe.com.ua, http://vk.com/cinema.caffee, http://www.face
- book.com/Cinema.Caffee
- Телефон:758-55-88, +380 (63) 225-57-77
- Емеил:info@cinema-cafe.com.ua
- Skype:
- Время работы:10 00 - 23 00
- Наименование:FASHION COFFEE, boutique Харьков
- Адрес:улица Сумская, 77/79
- Сайт:
- Телефон:750-60-44, +380 (99) 700-17-76
- Емеил:fcoffee@ymail.com
- Skype:fashioncoffee1
- Время работы:с 9:00 до 19:00
- Наименование:РК 24
- Адрес:улица Героев Труда, 9, ТРЦ Дафи, 3-этаж
- Сайт:http://rk24.com.ua/
- Телефон:728-19-47
- Емеил:
- Skype:
- Время работы:круглосуточно
- Наименование:TACO- Доставка мексиканской кухни
- Адрес:
- Сайт:http://taco.com.ua
- Телефон:758-90-90
- Емеил:taco.kh@mail.ru
- Skype:
- Время работы:10.00 - 22.00
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д