ページ 11

インターネットから情報を取り出す方法

Posted: 2014年2月20日(木) 19:32
by あかり
いつもお世話になっています。
インターネットから情報だけを取り出す方法なんですが、HTMLのコマンドなどを抜いて書いてある情報だけを取り出すには、
コマンドなどのキーワードを削除するプログラムを組まないとダメでしょうか?
よろしくお願いします。

コード:

#include <stdio.h>
#include <winsock2.h>
#include <wininet.h>
#pragma comment(lib, "wininet.lib")
#include <iostream>
#include <fstream>

#define MAX 10000

void GetHttpFile();

int main(int argc, char *argv[]){
	GetHttpFile();

	return 0;
}

void GetHttpFile()
{
	HINTERNET hInternet;
	HINTERNET hFile;
	char Buf[MAX];
	DWORD ReadSize;
	BOOL bResult;
	std::ofstream ofs("test.txt");

	/* WININET初期化 */
	hInternet = InternetOpen(
		"WININET Sample Program",
		INTERNET_OPEN_TYPE_PRECONFIG,
		NULL,
		NULL,
		0);

	/* URLのオープン */
	hFile = InternetOpenUrl(
		hInternet,
		"http://news.yahoo.co.jp/",
		NULL,
		0,
		INTERNET_FLAG_RELOAD,
		0);

	/* オープンしたURLからデータを(1000バイトずつ)読み込む */
	for (;;) {
		ReadSize = MAX-1;

		bResult = InternetReadFile(
			hFile,
			Buf,
			MAX-1,
			&ReadSize);

		/* 全て読み込んだらループを抜ける */
		if (bResult && (ReadSize == 0)) break;

		Buf[ReadSize] = '\0';
		std::cout << Buf;
		ofs << Buf;
	}

	/* 後処理 */
	InternetCloseHandle(hFile);
	InternetCloseHandle(hInternet);
}

Re: インターネットから情報を取り出す方法

Posted: 2014年2月20日(木) 19:53
by みけCAT
sedなどを使えば出来ないことはないかもしれませんが、
(少なくとも自分は)Perlでプログラムを書くのが楽だと思います。

Re: インターネットから情報を取り出す方法

Posted: 2014年2月20日(木) 19:54
by みけCAT
あかり さんが書きました:コマンドなどのキーワードを削除するプログラムを組まないとダメでしょうか?
逆に、取り出したい情報だけを取り出すプログラムを組む方がいいと思います。

Re: インターネットから情報を取り出す方法

Posted: 2014年2月20日(木) 20:32
by softya(ソフト屋)
httpのアクセスが楽で正規表現が使える言語なら比較的楽に出来る可能性はあります。
ただ、世間のサイトはHTML文法に忠実とは言えないので、ちゃんと取り出すには結構きめ細かな処理が必要です。
なので、HTMLレンダリングエンジン経由でテキストだけ取り出す仕組みを使ったほうが最終的には楽でしょう。

Re: インターネットから情報を取り出す方法

Posted: 2014年2月21日(金) 22:44
by あかり
返信ありがとうございます。
C言語よりほかの言語を使う方がいいんですね。
ほかの言語をいろいろ調べてみます、ありがとうございました。