Guest User

HardwareOnline scraper

a guest
Dec 9th, 2018
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.96 KB | None | 0 0
  1.  [CacheOutput(ClientTimeSpan = 120, ServerTimeSpan = 120)]
  2.         [HttpPost]
  3.         [Route("api/Webscraper/SearchHardwareOnlineForKeywords")]
  4.         public async Task<IHttpActionResult> SearchHardwareOnlineForKeywords(HardwareOnlineRequestModel model)
  5.         {
  6.  
  7.             if (model.MaxThreadsToScan > 500)
  8.             {
  9.                 return BadRequest("Max number of threads to scan is limited to 500 to keep up a good performance");
  10.             }
  11.  
  12.             if (model.Keywords.Count == 0)
  13.             {
  14.                 return BadRequest("You have to provide at least one keyword/sentence to scan for");
  15.             }
  16.  
  17.             var client = new HttpClient();
  18.             var doc = new HtmlAgilityPack.HtmlDocument();
  19.  
  20.             string url = model.SalesSection ? "https://www.hardwareonline.dk/koebsalgoversigt.aspx" : "http://www.hol.dk";
  21.  
  22.             var response = await client.GetStringAsync(url);
  23.  
  24.             doc.LoadHtml(response);
  25.  
  26.             if (model.SalesSection)
  27.             {
  28.  
  29.                 List<HardwareOnlineScraper> foundNodes = new List<HardwareOnlineScraper>();
  30.  
  31.                 var target = doc.GetElementbyId("ContentPlaceHolder_ContentPlaceHolder_data").Descendants("div").Where(d => d.Attributes.Contains("class") && (d.Attributes["class"].Value.Contains("ks-oversigt") || d.Attributes["class"].Value.Contains("ks-oversigt-odd"))).Take(500);
  32.  
  33.                 for (var i = 0; i < target.Count(); ++i)
  34.                 {
  35.                     var title = target.ElementAt(i).ChildNodes[0].FirstChild;
  36.                     var timestamp = target.ElementAt(i).ChildNodes[2].FirstChild.InnerText;
  37.  
  38.                     if (model.LimitedToLastTwoDays && (!timestamp.Contains("I dag") && !timestamp.Contains("I går")))
  39.                     {
  40.                         continue;
  41.                     }
  42.  
  43.                     string parsed = title.InnerText.ToLower().Replace("&#230;", "æ").Replace("&#229;", "å").Replace("&#248;", "ø");
  44.  
  45.                     if (model.Keywords.Any(v => parsed.Contains(v)))
  46.                     {
  47.  
  48.                         var user = target.ElementAt(i).ChildNodes[1].FirstChild.InnerText;
  49.                         var zip = target.ElementAt(i).ChildNodes[3].FirstChild.InnerText;
  50.  
  51.                         foundNodes.Add(new HardwareOnlineSalesModel
  52.                         {
  53.                             Title = parsed,
  54.                             ThreadUrl = "https://www.hardwareonline.dk" + title.GetAttributeValue("href", string.Empty),
  55.                             Timestamp = timestamp,
  56.                             Zip = zip,
  57.                             User = user,
  58.                             UserUrl = "https://www.hardwareonline.dk" + target.ElementAt(i).ChildNodes[1].FirstChild.GetAttributeValue("href", string.Empty)
  59.                         });
  60.                     }
  61.  
  62.                 }
  63.  
  64.                 return Ok(foundNodes);
  65.             }
  66.  
  67.             else
  68.             {
  69.  
  70.                 List<HardwareOnlineScraper> foundNodes = new List<HardwareOnlineScraper>();
  71.  
  72.                 var target = doc.DocumentNode.Descendants("div").Where(d => d.Attributes.Contains("class") && d.Attributes["class"].Value.Contains("pure-g"));
  73.  
  74.                 for (var i = 1; i < target.Count(); ++i)
  75.                 {
  76.                     var current = target.ElementAt(i).ChildNodes[1].FirstChild;
  77.  
  78.                     string parsed = current.InnerText.ToLower().Replace("&#230;", "æ").Replace("&#229;", "å").Replace("&#248;", "ø");
  79.  
  80.                     if (model.Keywords.Any(v => parsed.Contains(v)))
  81.                     {
  82.                         foundNodes.Add(new HardwareOnlineScraper
  83.                         {
  84.                             Title = parsed,
  85.                             ThreadUrl = "https://www.hardwareonline.dk" + current.GetAttributeValue("href", string.Empty)
  86.                         });
  87.                     }
  88.  
  89.                 }
  90.  
  91.                 return Ok(foundNodes);
  92.             }
  93.         }
Add Comment
Please, Sign In to add comment