private static MedicineParserResults AddNewMedicines(Alphabet alphabet) { var rowsAdded = 0; var htmlWeb = new HtmlWeb { OverrideEncoding = Encoding.GetEncoding(1251) }; foreach (var l in alphabet) { // <ul class="list"> var document = htmlWeb.Load(l.Url); var listNode = document.DocumentNode .Descendants("ul") .Where(n => n.Attributes.Contains("class") && n.Attributes["class"].Value.Equals("list") ); // Получение всех препаратов var meds = new List <Medicine>(); foreach (var ul in listNode) { foreach (var li in ul.Descendants("li")) { var node = li.Descendants("a").First(); var med = new Medicine { Name = node.InnerText, Url = node.Attributes["href"].Value == "/-instruktsiya/" ? null : ("http://apteka.103.by" + node.Attributes["href"].Value) }; meds.Add(med); } } using (var context = new MedicineContext()) { foreach (var med in meds) { if (context.Medicines.Count(m => m.Name == med.Name) > 0) { continue; } context.Medicines.Add(med); rowsAdded++; } context.SaveChanges(); } } var descAdded = ParseDescription(); return(new MedicineParserResults(rowsAdded, descAdded)); }
public static int ParseDescription() { var descAdded = 0; var htmlWeb = new HtmlWeb { OverrideEncoding = Encoding.GetEncoding(1251) }; using (var context = new MedicineContext()) { var emptyDescTable = context.Medicines .Where(m => m.Description == null && m.Url != null ); Parallel.ForEach(emptyDescTable, med => { try { var document = htmlWeb.Load(med.Url); // <div class="medicament"> var node = document.DocumentNode .Descendants("div") .Where(div => div.Attributes.Contains("class") && div.Attributes["class"].Value.Equals("medicament") )?.First(); if (node == null) { return; } med.Description = node.InnerHtml; descAdded++; } catch (System.Net.WebException e) { MessageBox.Show( med.Url + "\n" + e.Message, "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error); return; } }); context.SaveChanges(); } return(descAdded); }