2012-02-25 32 views
1

私は、WebページからHTMLを取り除き、テキストを保持する単純なCプログラムを作成しようとしています。これまでのところ私は以下のコードを思いついた。 cURLを使用してWebページの内容を取得し、ファイルに書き出します。どのように私は、メモリバッファーを通過し、すべてのHTMLタグを削除し、テキストまたは端末またはファイルに出力?バッファから読み込みC

#include <curl/curl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#define WEBPAGE_URL "http://homepages.paradise.net.nz/adrianfu/index.html" 
#define DESTINATION_FILE "/home/acwest/data.txt" 

size_t write_data(void *ptr, size_t size, size_t nmeb, void *stream) 
{ 
return fwrite(ptr,size,nmeb,stream); 
} 

int main() 
{ 
int in_tag = 0; 
char * buffer; 
char c; 
long lSize; 
size_t result; 

FILE * file = fopen(DESTINATION_FILE,"w+"); 
if (file==NULL) { 
fputs ("File error",stderr); 
exit (1); 
} 

CURL *handle = curl_easy_init(); 
curl_easy_setopt(handle,CURLOPT_URL,WEBPAGE_URL); /*Using the http protocol*/ 
curl_easy_setopt(handle,CURLOPT_WRITEFUNCTION, write_data); 
curl_easy_setopt(handle,CURLOPT_WRITEDATA, file); 
curl_easy_perform(handle); 
curl_easy_cleanup(handle); 

// obtain file size: 
fseek (file, 0, SEEK_END); 
lSize = ftell (file); 
rewind (file); 

// allocate memory to contain the whole file: 
buffer = (char*) malloc (sizeof(char)*lSize); 
if (buffer == NULL) { 
fputs ("Memory error",stderr); 
exit (2); 
} 

// copy the file into the buffer: 
result = fread (buffer,1,lSize,file); 
if (result != lSize) { 
fputs ("Reading error",stderr); 
exit (3); 
} 
} 
+0

http://expat.sourceforge.net/ – Cyclonecode

+2

のような既存の解析ライブラリを使用することができます。達成しようとしていることは、カールの組み合わせを使用して、bashスクリプトの1ライナーに近いでしょうとsed。 – qdii

+0

@ user667430:あなたのコードはコンパイルされていません... – qdii

答えて

0

CurlはHTMLの解析に役立つものではなく、複雑な作業です。言語仕様を読み、パーサーを書くことができます。 http://www.mbayer.de/html2text/にはオープンソースのC++プロジェクトがあり、https://github.com/aaronsw/html2textにはpythonスクリプトがあります。また、コマンドラインからhtml2textをインストールして使用することも、Cコードからhtml2textを実行することもできます。

関連する問題