1

私はWindowsストアに簡単なアプリケーションを持っています。このアプリケーションは、WebサイトからHTMLをダウンロードして解析します。HttpClientクラスを使用しています

ページが特定の国とは異なって見え、解析が成功しないため、今は大きな問題があります。

例:米国の誰かが私のアプリを使用している場合、ウェブページが特定の国で異なって見えるため、異なるHTMLコンテンツをダウンロードするアプリ。

httpクライアントでデフォルトの場所を設定するにはどうすればよいですか?すべての実行で同じHTMLが必要です。

編集 私はこのページを呼んでいます:リンク

4

5 に答える 5

2

リクエストを行うとき、および/またはユーザー定義可能な設定にすることを検討するときに、デフォルトの言語ヘッダーを設定する必要があります。

http://www.w3.org/TR/WCAG20-TECHS/SVR5

于 2013-01-07T14:05:54.843 に答える
2

最初の質問を一瞬無視する

いかなる機能についても、あらゆる種類の HTML 解析に依存するアプリを作成しないでください。あなたが呼び出しているサイトは、「間違った」場所で ID を 1 つまたは 2 つ変更するだけで、更新を公開するまで、すべてのユーザーに対してアプリが失敗します。

答えに戻る

スクリーンスクレイピングがあなたのアプリでやりたい方法であると仮定し、もちろん、あなたがスクレイピングしているサイトがそのような動作を利用規約で許可していると仮定します(確認してください - それはあなたにとって面白くないでしょう.読まなかった場合に訴えられるなど)、少し異なるアプローチをお勧めします。

ユーザーがアプリにアクセスするどのロケールでも同じページ レイアウトを取得できるとは限らないため、解析作業を行う Web サービスをセットアップし、サイトに直接アクセスする代わりにアプリからそのサービスに問い合わせてみませんか。 ?

アプリ <--> Web サービス <--> データを提供するサイト

そうすれば、返されるデータが特定のロケール (Web サーバー) の場合と同じように一貫してフォーマットされていることが常にわかり、それを解析するコードを 1 つ維持するだけで済みます。基礎となるデータ構造に変更があるときはいつでも、それははるかに簡単になります(そして、私を信じてください、変更があるでしょう)

于 2013-01-07T14:36:03.720 に答える
0

Accept-Language設計上の欠陥の考慮事項を一時的に脇に置いて(画面スクレイピングを行う理由がある場合とない場合があります)、ヘッダーを設定する方法は次のとおりです。

var httpClient = new HttpClient();
var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, new Uri("http://www.livescore.com"));
httpRequestMessage.Headers.Add("Accept-Language", "en");
var response = await httpClient.SendAsync(httpRequestMessage);
string content = await response.Content.ReadAsStringAsync();
于 2013-01-07T15:05:57.413 に答える
0

これに対する答えは、Web サイトがデフォルトの言語選択をどのように実装しているかによって異なります。特定のサイトの仕組みによっては、他の両方の答えが正しい可能性があります。

サイトの URL を共有していただければ、使用する適切な戦略をお伝えできます。

于 2013-01-07T14:08:31.183 に答える
-1

常に問題のURLをcultureInfoパスパラメータで呼び出すようにしてください。たとえば、microsoft.comをターゲットにしている場合は、次のようになります。

等々。これがあなたに当てはまるなら、これはアイデアでしょう。

于 2013-01-07T14:04:12.040 に答える