2010-12-02 3 views
0

私のアプリケーションは、データの一部として大量のリンクを含む大きなHTML形式のファイルを取得します。 GoogleやYahooなどの検索エンジンで何かを検索すると、URLのリストと説明やその他のテキストが表示されます。HTMLからURLの情報を解析する<a></a> Cのタグ

私は、URLと説明を解析してテキストファイルに保存する機能を試してきましたが、少なくとも私にとっては実証済みです。だから、私が持っている場合:

<a href="http://www.w3schools.com">Visit W3Schools</a>

私はhttp://www.w3schools.comVisit W3Schoolsを解析し、ファイルに保存します。

これを達成する方法はありますか?普通のCで?
ご協力いただければ幸いです。

+0

本当にHTMLが「...」の場合は、XSLを使用できます。それ以外の場合は、完全なHTMLパーサが必要です。たぶんシェルスクリプト+ ** Lynx **(テキストベースのブラウザ)+ ** awk **。これがワンタイムタスクであれば、エディタで検索/置換します。 (やはり、整形式のXHTMLを想定しています) –

+0

これは単純なhtmlファイルです。 はそれだけです。今、私はライブラリや外部のHTMLパーサを使いたくない。私はちょうどファイルを読んで、URLと説明を解析したい。 – Jessica

+0

それはあなたがCでそれをやろうとしているということがあなたのために難しいと主張されている主な理由は、Cは本当に、本当に*本当に*この種の仕事のために作られていません。より新しい言語は、文字列操作のためにより洗練されたツールを提供します。 Cには実際のテキストタイプが組み込まれていません。あなたがchar \ *とchar [N]を使うと、あなたはそれを偽っています。 –

答えて

1

あなたが本当に適切なHTMLパーサが必要ですが、迅速かつ汚い何かを、試してみてください。dataが解析されたデータを超えているように更新されることを

bool get_url(char **data, char **url, char **desc) 
{ 
    bool result = false; 
    char *ptr = strstr(*data, "<a"); 

    if(NULL != ptr) 
    { 
    *data = ptr + 2; 

    ptr = strstr(*data, "href=\""); 
    if(NULL != ptr) 
    { 
     *data = ptr + 6; 
     *url = *data; 

     ptr = strchr(*data, '"'); 
     if(NULL != ptr) 
     { 
     *ptr = '\0'; 
     *data = ptr + 1; 

     ptr = strchr(*data, '>'); 
     if(NULL != ptr) 
     { 
      *data = ptr + 1; 
      *desc = *data; 

      ptr = strstr(*data, "</a>"); 
      if(NULL != ptr) 
      { 
      *ptr = '\0'; 
      *data = ptr + 4; 
      result = true; 
      } 
     } 
     } 
    } 
    } 

    return result; 
} 

ない(それは中-outパラメータだ)とすることを渡された文字列が変更されます。私は怠惰な/メモリが返された文字列を持つ完全なソリューションを行うにはあまりにも忙しい気分です。

また、おそらく、私がそれらを重ねた理由の一部であるクローズスコープブレース(最初のものを除く)のカスケードでエラーを返すべきです。より一般的なものに適合させることができる他のより良いソリューションがあります。

したがって、基本的にはfalseを返すまで関数を繰り返し呼び出します。

+0

偉大な、それを試してみましょう – Jessica

+0

クール、私はちょうどchar *の最大サイズを把握する必要があり、私は設定されています。お手伝いありがとう! – Jessica