Урок 2 – парсер прокси.

Урок 2 – парсер прокси.

Ну что, думаю пора уже создать первый проект. Это будет парсер прокси. С его помощью мы научимся на практике делать первые запросы и заодно увидим как применяются простые регулярные выражения. Для примера мы будем собирать прокси с сайта www.socks24.org. Итак, откроем Visual Studio, создадим проект типа «Console Application» на C# и добавим в References Viking.Engine.dll.

Чтобы его было удобно использовать напишем сверху

using System.Text.RegularExpressions;
using ViKing.Engine;using System.IO;

Для начала наша задача — открыть главную страницу www.socks24.org, найти все что похоже на прокси (ip адрес:порт) и сохранить в файл. Первым делом нам нужно скачать текст страницы.

var page = VkRequest.Request("http://www.socks24.org/").Content;

Функция Request по умолчанию просто скачивает содержимое страницы с помощью метода GET. Свойство Content хранит содержимое страницы  стандартной кодировке windows-1251. Теперь нужно из этого текста вытащить все что похоже на прокси. Это делается следующей командой

var matches = Regex.Matches(page, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}");

Так выглядит регулярное выражение. Устроено оно следующим образом. @ перед строкой означает что мы хотим отключить esc-последовательности, то есть «\» означает именно слеш, а не спецсимвол. Дальше идет элемент «\d», который символизирует любую цифру. Затем «{1,3}» означает что цифры должны встретиться  количестве от 1 до 3. Потом стоит «\.», что означает просто точку. Напомню, что в регулярных выражениях точка обозначает любой символ, и если вы хотите видеть именно точку то нужно использовать слеш. После этого все повторяется 4 раза и дальше идет двоеточие и порт — 1-5 цифр. Теперь нужно склеить все полученные результаты в строку и записать результат в файл:

string result = "";foreach (Match m in matches)result = result + m.Value + "\r\n";File.WriteAllText("proxies.txt", result);

Программа будет работать гораздо быстрее если для таких вещей использовать StringBuiler, в дальнейшем мы будем только его использовать чтобы формировать длинные строки:

StringBuilder result = new StringBuilder();foreach (Match m in matches)result.AppendLine(m.Value);File.WriteAllText("proxies.txt", result.ToString());

Вот и все, полученный скрипт будет собирать прокси с указанной страницы и записывать их в файл. Можно еще усовершенствовать парсер, чтобы он читал из файла список адресов с проксями и в цикле заходила на каждый из них.

Ну и напоследок бонус. Вот как записать эту программу в 1 строку

File.WriteAllLines("proxies.txt", Regex.Matches(VkRequest.Request("http://www.socks24.org/").Content, @"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:\d{1,5}").OfType<;Match>().Select(q => q.Value).ToArray());

Скачать готовый парсер ProxyParser

Comments are closed.