Guest User

Untitled

a guest
Mar 8th, 2016
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.01 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net;
  7. using HtmlAgilityPack;
  8. using System.IO;
  9.  
  10. namespace mlpreactor
  11. {
  12. class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. ServicePointManager.DefaultConnectionLimit = 10000;
  17. Console.Write("1. Скачать все картинки\n2. Скачивать по тегам(теги разделяются пробелом)\n\n>Выбор: ");
  18. int choice = int.Parse(Console.ReadLine());
  19. Console.Clear();
  20.  
  21. if (choice == 1)
  22. {
  23. Directory.CreateDirectory("images");
  24. int maxPage = int.Parse(getMaxPage("http://mlp.reactor.cc/"));
  25.  
  26. for (int i = maxPage; i > 1; i--)
  27. {
  28. Console.WriteLine(">парсим страницу: " + "http://mlp.reactor.cc/" + i);
  29. var pictures = getPictureList("http://mlp.reactor.cc/" + i);
  30. Parallel.ForEach(pictures, pic =>
  31. {
  32. var client = new WebClient();
  33. client.DownloadFile(pic, Path.Combine(Directory.GetCurrentDirectory(), "images", pic.Substring(pic.LastIndexOf('-') + 1)));
  34. });
  35.  
  36. }
  37. }
  38.  
  39. else
  40. {
  41. Console.Write(">тег: ");
  42. string tag = Console.ReadLine();
  43. Console.Clear();
  44. Directory.CreateDirectory(tag);
  45. string encoded = tag.Replace(" ", "%2B");
  46. int maxPage = int.Parse(getMaxPage("http://mlp.reactor.cc/tag/" + encoded));
  47.  
  48. for (int i = maxPage; i > 1; i--)
  49. {
  50. Console.WriteLine(">парсим страницу: " + "http://mlp.reactor.cc/tag/" + encoded + "/" + i);
  51. var pictures = getPictureList("http://mlp.reactor.cc/tag/" + encoded + "/" + i);
  52. Parallel.ForEach(pictures, pic =>
  53. {
  54. var client = new WebClient();
  55. client.DownloadFile(pic, Path.Combine(Directory.GetCurrentDirectory(), tag, pic.Substring(pic.LastIndexOf('-') + 1)));
  56. });
  57. }
  58. }
  59. }
  60.  
  61. private static string getMaxPage(string url)
  62. {
  63. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  64. Stream stream = req.GetResponse().GetResponseStream();
  65. StreamReader reader = new StreamReader(stream);
  66. string html = reader.ReadToEnd();
  67. HtmlDocument doc = new HtmlDocument();
  68. doc.LoadHtml(html);
  69. string page = doc.DocumentNode.SelectSingleNode("//./a[@class='next']").Attributes["href"].Value;
  70.  
  71. return page.Substring(page.LastIndexOf(@"/") + 1);
  72. }
  73.  
  74. private static List<string> getPictureList(string url)
  75. {
  76. List<string> pictures = new List<string>();
  77. HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
  78. Stream stream = req.GetResponse().GetResponseStream();
  79. StreamReader reader = new StreamReader(stream);
  80. string html = reader.ReadToEnd();
  81. HtmlDocument doc = new HtmlDocument();
  82. doc.LoadHtml(html);
  83.  
  84. //full-size
  85. if (html.Contains("prettyPhotoLink"))
  86. {
  87. var fullSz = doc.DocumentNode.SelectNodes("//./div[@class='image']/a");
  88. foreach (var div in fullSz)
  89. pictures.Add(div.Attributes["href"].Value);
  90.  
  91. }
  92.  
  93. else
  94. {
  95. var stdSz = doc.DocumentNode.SelectNodes("//./div[@class='image']//./img");
  96. foreach (var div in stdSz)
  97. pictures.Add(div.Attributes["src"].Value);
  98. }
  99.  
  100. return pictures;
  101. }
  102. }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment