Первая опыт JAVA. Парсер прокси с обходом защиты

 
 
 
Сообщения:4
/*
Совсем небольшой код - мой первый опыт JAVA. Хотелось бы послушать комментарии, чтобы лучше понять этот язык.

Парсится список прокси попутно обходится простая защита от парсинга.

Была использована библиотека Jsoup для облегчения разбора DOM. Она позволяет это делать с помощью привычных CSS
селекторов (буду благодарен если подскажете подобные библиотеки).
*/

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.*;
import java.util.ArrayList;

public class Main {
	public static void main(String[] args) throws IOException
	{
		ArrayList<String> proxyes = new ArrayList<String>();

		Document doc = Jsoup.connect("http://hidemyass.com/proxy-list/").get();
		Elements trs = doc.select("#listtable tbody > tr");
		for (Element tr : trs)
		{
			String port = null;
			String ip = null;

			Elements tds = tr.select("td:gt(0):lt(3)");
			for (Element td : tds)
			{
				Elements style = td.select("style");
				if(style.isEmpty())
				{
					port = td.text();
				}
				else
				{
					// в блоке <style></style> перечислены "невидимые" классы, они создают шум - защита от парсинга
					String unvizClasses = style.first().data()
							.replaceAll("\\..*?\\{display:inline\\}|\n|\r", "")
							.replaceAll("\\{.*?\\}|^\\.", "")
							.replaceAll("\\.", "|");

					// Теперь получаем блок с ip удаляем мусор и шум - защиту.
					Element els = td.select("span").first();
					ip = els.html()
							.replaceAll("\n|\r", "")
							.replaceAll("\\<style\\>.*?\\</style\\>|\\<(span|div) style=\"display:none\"\\>.*?\\</(span|div)\\>", "")
							.replaceAll("\\<(span|div) class=\"(" + unvizClasses + ")\"\\>.*?\\</(span|div)\\>", "")
							.replaceAll("\\<.*?\\>| ", "");
				}
			}
			proxyes.add(ip + ":" + port);
		}

		// В этом примере я просто вывожу в консоль..
		for (String proxy : proxyes)
		{
			System.out.println(proxy);
		}
	}
}
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет