2010-12-06 2 views
2

저를 너무 많이 싫어하지 않으시 고, 아주 쉽게 답해 주실 수 있기를 바랍니다. 웹 사이트의 파일을 문자열로 읽고 싶으므로 그 정보를 추출 할 수 있습니다.HTML 소스를 문자열로 읽으십시오.

HTML 소스를 문자열로 읽는 간단한 방법이 필요합니다. 몇 시간 동안 둘러 본 후에 나는이 모든 도서관과 컬을보고 있습니다. 필요한 것은 원시 HTML 데이터뿐입니다. 나는 명확한 대답조차 필요가 없다. 내 검색을 구체화하는 데 도움이 될만한 것.

그냥 내가 어떤 구문 분석 등

+0

귀하의 검색이 작동하지 않습니다를 사용합니다 그래서 만약 당신이 C++를 태그. 파싱하지 않고 웹 페이지를 가져 오려면 HTTP 클라이언트 라이브러리가 필요합니다. "html"을 찾지 마십시오. "html"을 구문 분석하고 싶지 않으므로 검색과 관련이 없습니다. –

답변

3

HTTP는 TCP 위에 구축이 필요하지 않습니다, 나는 조작 할 수있는 문자열의 원시 코드를 원하는 명확합니다. 소켓 프로그래밍을 알고 있다면 원하는 서버에 대한 소켓을 열고 HTTP GET 명령을 실행하는 간단한 네트워킹 응용 프로그램을 작성할 수 있습니다. 서버가 응답 할 때마다 원하는 실제 문서 앞에 오는 HTTP 헤더를 제거해야합니다.

소리가 복잡하다면 libcurl을 사용하십시오.

+0

나는 @chrisaycock에 동의한다. 최선의 선택은 아마도 좋은 libcurl 예제를 찾아서 그걸로 간다. – wajiw

1

해킹 인 경우 - 다음에 show source에서 소스를 가져 와서 txt로 저장하십시오. 정상적인 파일 스트림으로 열 수 있습니다. 당신이 원하는 모든 전체 HTML 코드를 잡아 경우

  • 모든 도스 성가신 라이브러리는
0

: ... 그것은 바로 그것을 할 수있는 일반적이고 비 사소한 훈련이라고 힌트입니다 어떤 종류의 구문 분석 및 extern 라이브러리 없이도 코드에서 IO 스트림을 문자열로 복사 할 수 있습니다.

가장 염두에 두긴하지만 가장 효율적인 방법은 아닙니다.

6

HTTP 클라이언트 라이브러리가 필요합니다. 많은 클라이언트 중 하나는 libcurl입니다. 그런 다음 URL에 GET 요청을 보내 선택한 라이브러리가 제공 한 응답을 읽습니다.

여기에 이 있습니다. 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; 
} 

그러나 당신이 잘못된 일을 찾고 있기 때문에 libcurl에서의 C++ 래퍼는 다음 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; 
} 
관련 문제