Читать исходный код HTML в строку - PullRequest
4 голосов
/ 06 декабря 2010

Надеюсь, ты не слишком на меня нахмуришься, но кто-то должен ответить на это довольно легко.Я хочу прочитать файл на веб-сайте в строку, чтобы извлечь из него информацию.

Мне просто нужен простой способ получить исходный текст HTML, прочитанный в строку.Посмотрев вокруг несколько часов, я вижу все эти библиотеки и все такое.Все, что мне нужно, это необработанные данные HTML.Мне даже не нужен определенный ответ.Просто что-то, что поможет мне уточнить мой поиск.

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

Ответы [ 4 ]

8 голосов
/ 07 декабря 2010

Вам нужна клиентская библиотека HTTP, одна из многих - libcurl. Затем вы отправите запрос GET на URL-адрес и прочитаете ответ, как только выбранная вами библиотека предоставит его.

Вот пример , чтобы вы начали, это C, поэтому я уверен, что вы можете решить это.

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");
    res = curl_easy_perform(curl);

    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }
  return 0;
}

Но вы пометили этот C ++, поэтому, если вы хотите обёртку C ++ для libcurl, используйте curlpp

#include <curlpp/curlpp.hpp>
#include <curlpp/Easy.hpp>
#include <curlpp/Options.hpp>

using namespace curlpp::options;

int main(int, char **)
{
  try
  {
    // That's all that is needed to do cleanup of used resources
    curlpp::Cleanup myCleanup;

    // Our request to be sent.
    curlpp::Easy myRequest;

    // Set the URL.
    myRequest.setOpt<Url>("http://example.com");

    // Send request and get a result.
    // By default the result goes to standard output.
    myRequest.perform();
  }

  catch(curlpp::RuntimeError & e)
  {
    std::cout << e.what() << std::endl;
  }

  catch(curlpp::LogicError & e)
  {
    std::cout << e.what() << std::endl;
  }

  return 0;
}
3 голосов
/ 07 декабря 2010

HTTP построен поверх TCP. Если вы знаете программирование сокетов, вы можете написать простое сетевое приложение, которое открывает сокет для нужного сервера и запускает команду HTTP GET. Чем бы сервер ни отвечал, вам придется удалить заголовки HTTP, которые предшествуют нужному документу.

Если это звучит сложно, просто придерживайтесь libcurl.

1 голос
/ 07 декабря 2010

если это хак - тогда просто возьмите исходник из show source и сохраните как txt.затем вы можете открыть его с помощью обычного файла io stream.

  • все эти надоедливые библиотеки - намек на то, что это обычное и нетривиальное упражнение для правильного выполнения ...:)
0 голосов
/ 07 декабря 2010

Если все, что вы хотите сделать, это захватить весь HTML-код без какого-либо анализа и внешних библиотек, я бы предложил скопировать код с потоком ввода-вывода в строку.

Это самый простой способ, который я имею в виду, но имейте в виду, что это не самый эффективный способ сделать это.

...