いくつかのHTMLを解析する簡単な試みでかなりの問題が発生しているようです。練習としては、クロールするサイトのリストで始まるマルチスレッドのWebクローラを作成しています。これはいくつかのクラスを通して伝えられ、最終的にはサイトのコンテンツを私のシステムに戻すべきです。C#Web解析の競合
A. Webサイトのコンテンツ(HttpWebRequestストリームからの文字列形式)をHtmlDocumentに変換します(新しいインスタンスを作成できません)。これは簡単ですが、 HtmlDocument.Write()メソッドを使用することで、HtmlDocumentの意味が分かりません)。
又は
B.は、WebBrowserインスタンスを介してのHTMLDocumentを収集します。ここで
は、このコードは、それが「移動」メソッド上を通過する際に何もしないように思わ
public void Start()
{
if (this.RunningThread == null)
{
Console.WriteLine("Executing SiteCrawler for " + SiteRoot.DnsSafeHost);
this.RunningThread = new Thread(this.Start);
this.RunningThread.SetApartmentState(ApartmentState.STA);
this.RunningThread.Start();
}
else
{
try
{
WebBrowser BrowserEmulator = new WebBrowser();
BrowserEmulator.Navigate(this.SiteRoot);
HtmlElementCollection LinkCollection = BrowserEmulator.Document.GetElementsByTagName("a");
List<PageCrawler> PageCrawlerList = new List<PageCrawler>();
foreach (HtmlElement Link in LinkCollection)
{
PageCrawlerList.Add(new PageCrawler(Link.GetAttribute("href"), true));
continue;
}
return;
}
catch (Exception e)
{
throw new Exception("Exception encountered in SiteCrawler: " + e.Message);
}
}
}
...何かアドバイスは素晴らしいことだ、それが存在するように私のコードです。 IEの新しいインスタンスをポップアップして指定されたアドレスに移動するが、navigateメソッドのプログラムステップの前に移動するのではなく、新しいウィンドウで開くようにしようとした。私はブラウザが「忙しくない」のを待ってみましたが、とにかくビジー属性を拾うようなことはありません。私はWebRequestストリームからデータを取り込むことができるように、Browser.Document.OpenNew()を介して新しいドキュメントを作成しようとしましたが、私が到達しようとするとNull Pointer例外を返すと確信できますそのステートメントの 'Document'部分。私はいくつかの研究を行っており、これは新しいHtmlDocumentを作成する唯一の方法であるようです。
このように、このメソッドは、指定されたページのすべてのリンクについて「PageCrawler」を開始することを意図しています。 HttpWebRequestを使ってストリームからデータを収集した後、すべてのリンクを見つけるために文字単位でHTML文字を解析できると確信していますが、これはこれを完了するために必要な作業よりはるかに多くの作業です。
誰かがアドバイスをいただければ、大変感謝します。ありがとうございました。
http://www.codedblog.com/2007/08/29/google-web-toolkit-and-c/ –
を使用することを検討してください。あなたのコードをテストしようとしたとき、私は 'this.RunningThread' this.SiteRoot'' PageCrawler'など。あなたは本当の答えではないと思います。 –