рограмма парсинга. Парсит странички,выберая нужный текст и сохраняет в файл 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
|