Java: эффективность HtmlUnit, связывающая PHP CURL? - PullRequest
1 голос
/ 31 мая 2011

У меня есть класс паука, который по запросу пользователя запрашивает у сайтов пауки контент.Каждый поиск приводит к загрузке около 30 веб-сайтов, их поиску и стандартизации.

Я написал это на PHP с использованием CURL, поскольку в PHP отсутствует многозадачность, я хотел бы переключиться на Java (я знаю о многопроцессорном завитке, который не удовлетворяет моим требованиям).Мне нужен http-клиент, который может POST / GET, получать и устанавливать файлы cookie, а также изменять заголовки HTTP.

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

Как вы думаете, это будет проблемой, и у вас есть другие предложения по замене CURL в Java?Должен ли я использовать привязку Java CURL? Это вопрос эффективности и нагрузки на сервер.

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Возможно, посмотрите на Apache Http Client ?

. Вы можете создать HttpClient для каждого потока и использовать его для выполнения ваших запросов

while (running) {

HttpClient client = new DefaultHttpClient();
HttpGet GET = new HttpGet("mydomain.com/path.html");
HttpResponse response = client.execute(GET);
// do stuff with response

}

Еще лучше,если вы повторно используете HttpClient между запросами, он запоминает файлы cookie, отправленные в предыдущих ответах, и автоматически применяет их к вашему следующему запросу.В этом смысле один HttpClient моделирует диалог http.

Так что, если вы сделали

 client.execute(GET1);
  // cookies received in response
  client.execute(GET2);
  // the second get will send the cookies back received from GET1 response.

, вы могли бы тогда взглянуть на ExecutorService Java, который упростит размещение заданий паука инесколько потоков работает.

1 голос
/ 31 мая 2011

try http://code.google.com/p/crawler4j/ простое и эффективное решение, когда вам не нужен JavaScript.

1 голос
/ 31 мая 2011

В конечном итоге вам нужно будет оценить потенциальные решения, чтобы увидеть, что лучше всего соответствует вашим потребностям.

HtmlUnit предлагает богатый API для анализа веб-страниц, а также для поиска и оценки элементов на странице.

Более простым решением было бы просто использовать HttpClient (который HtmlUnit использует под капотом).Это просто загрузит всю страницу и вернет ее как OutputStream или String.Затем вы можете использовать регулярные выражения для поиска ссылок и т. Д., Вероятно, больше похоже на то, что вы делаете с curl.

...