2016-03-26 3 views
2

私は様々な技術についていくつか学んだ後、UWP + NoSQLを使って小さなプロジェクトを作りたがっていました。私は星座をつかんで毎朝私のラズベリーパイに表示する小さなUWPアプリを作りたかったのです。ブラウザのようなWebページコンテンツを取得する

だから私はWebClientを取って、私は次の操作を行います(

WebClient client = new WebClient(); 
client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
string downloadString = client.DownloadString("http://www.horoscope.com/us/horoscopes/general/horoscope-general-daily-today.aspx?sign=2"); 

しかし、興味深い部分は内容ではありませんので、それは、この要求は、ブラウザから来ていないことを検出しているようです私がブラウザで確認すると、それは最初のHTMLにあります、フィドラーによると)。

私もScrapySharpで試しましたが、私は同じ結果を得ました。どんな考え?

(私はすでにUWPの一部をやったので、私はそれは、「ボット」として検出されたからといって、私の個人的なプロジェクトのトピックを変更したくない)

EDIT

私は十分にはっきりしていなかったようだ。問題はありません* Iは、HTMLを解析することができないだと、問題は私が

ここEDIT2

は、私が取得するものであるScrapySharp/Webクライアントを使用する場合に期待されるHTMLを受けていないということです**です。 http://pastebin.com/sXi4JJRG

そして、私は(例で)あなたは、以下に示すコードスニペットを使用してWebページのコンテンツ全体を読むことができる「ドメインによるスター評価」+各星

+0

私はそのXMLを見つけようとしましたが、できませんでした。どこにあるのか少し説明できますか? – ganchito55

+0

@ ganchito55申し訳ありませんが、私は初期のHTMLを意味し、XMLは意味しませんでした。私はちょうどそれがajaxコールの中にロードされていないと言っていた – J4N

+0

あなたはHTMLの敏捷性パックを試しましたか? –

答えて

0

[OK]を、私は何が起こっているのか知っていると思う:私はあなたペーストビンによって供給される出力に真の出力(無空想のユーザーエージェント文字列)と比較して何か面白いものを見つけました。ライン213で、あなたペーストビンがあります

<li class="dropdown"><a href="/us/profiles/zodiac/index-profile-zodiac-sign.aspx" class="dropdown-toggle" data-hov...ck">Forecast Tarot Readings</div> 

マインドdata-hov...ck終わり近く。実際の出力では、このされました:前述の「興味深い部分」を含むコードの約600行、続い

<li class="dropdown"><a href="/us/profiles/zodiac/index-profile-zodiac-sign.aspx" class="dropdown-toggle" data-hover="dropdown" data-toggle="link">Astrology</a> 

。ライン814で、それは言う:

黒にCKから始まり、
<div class="bot-explore-col-subtitle f14 blocksubtitle black">Forecast Tarot Readings</div> 

、ペーストビン出力の残りの部分と一致してアップ。ですから、ペーストビンのいずれかが出力を凝縮していたか、元の出力が元に戻りました。

私は、新しいコンソールアプリケーションを作成し、あなたのコードを挿入し、そしてあなたが欠場するようで、HTMLの600行を含め、私が期待される結果を得た:

static void Main(string[] args) 
{ 
    WebClient client = new WebClient(); 
    client.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 
    string downloadString = client.DownloadString("http://www.horoscope.com/us/horoscopes/general/horoscope-general-daily-today.aspx?sign=2"); 

    File.WriteAllText(@"D:\Temp\source-mywebclient.html", downloadString); 
} 

マイWebClientSystem.Netからです。 UserAgentを変更することはほとんど効果がありません。いくつかのリンクは少し異なります。

だから、それを合計するには:あなたの問題は、初期取得した後、動的に挿入されている内容とは何の関係もありませんが、おそらくUWPと組み合わせてWebクライアントで。サイト上のwebclientとUWPに関するもう1つの質問があります:(UWP) WebClient and downloading data from URL inは、HttpClientを使うべきだと述べています。多分それは解決策ですか?

1

ための関連画像を得ることはありません:

internal static string ReadText(string Url, int TimeOutSec) 
{ 
    try 
    { 
     using (HttpClient _client = new HttpClient() { Timeout = TimeSpan.FromSeconds(TimeOutSec) }) 
     { 
      _client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html")); 
      using (HttpResponseMessage _responseMsg = _client.GetAsync(Url)) 
      { 
       using (HttpContent content = _responseMsg.Content) 
       { 
        return content.ReadAsString(); 
       } 
      } 
     } 
    } 
    catch { throw; } 
} 

または、簡単な方法で:

public static void DownloadString (string address) 
{ 
    WebClient client = new WebClient(); 
    string reply = client.DownloadString (address); 

    Console.WriteLine (reply); 
} 

(再:https://msdn.microsoft.com/en-us/library/fhd1f0sw(v=vs.110).aspx

+0

既にこれを行っていますが、問題はブラウザで質問するときと同じHTMLコンテンツを取得できないことです。サーバーは、私がアプリケーションに求めていることを検出するようだとinteresstingコンテンツ – J4N

1

はい、Webクライアントを使用して、結果を期待与えることはありません。多くのサイトにはコンテンツを読み込むスクリプトがあります。ブラウザをエミュレートするには、ページスクリプトも実行する必要があります。 私は似たようなことは一度もしていないので、私の答えは理論的に純粋です。

問題を解決するには、「ヘッドレスブラウザ」が必要です。 私はこのために2つのプロジェクト(私はそれのONYを試したことがない)を知っている:

http://webkitdotnet.sourceforge.net/を -

http://www.awesomium.com/

+0

せずに私のウェブサイトの構造のみを返します。しかし、私はmentionnedのように、それはhasnので、内容は、私はシオマネキ以内になった最初のHTMLファイル内に存在していましたajaxコールの中にロードされている – J4N

+0

それは奇妙です。ちょうどあなたのコードを試して、占星術でHTMLを得ました。私はあなたがテスト中に多くの要求のために禁止されるかもしれないと仮定することができます –

+0

私はちょうど別のネットワーク、別のコンピュータからテストしました、そして私は同じ結果を得ました。私はペーストビンのリンクの中に結果を掲載しました(私の主な質問)。ちょっとしたHTMLだけではなく、あなたが関心のある部分を持っていると確信していますか? – J4N

0

を時代遅れにしているように見えるいくつかの時間前、私はそれがうまく働いたhttp://www.nrecosite.com/phantomjs_wrapper_net.aspxを使用し、アントンとしてそれはヘッドレスブラウザです。多分それはいくつかの助けになるでしょう。

+0

ページを開く方法の例がありますか?私はそれがPhantomJSの部分にあると思うが、私は例を見つけることができない – J4N

0

「コンテンツ内に」表示されると思われる「面白い部分」はすべて画像ですか?あなたはイメージを別々に取得しなければならないという事実を認識していますか? htmlページに<image.../>タグが含まれているという事実も、それらを魔法のように表示しません。 Fiddlerで見られるように、ページを取得した後、ブラウザは指定されたすべてのイメージ、スタイルシート、javascriptおよびその他のすべてのアイテムを取得しますが、ページには含まれません。 (これが起こるのを見るためにブラウザのキャッシュをクリアする必要があるかもしれません...)

+0

私は非常にhtmlを知っている。画像要素を取得し、そのURLをチェックして評価を定義することを期待しています。質問のペーストビンに示されているように、ウェブサイトのテンプレート(ヘッダー、メニュー、フッター)だけがあるようですが、それほど多くのコンテンツはありません – J4N

関連する問題