-3

Web から HTML ソース コードを取得しようとしています。私はこれをやってみました

u = new URL(url);
URLConnection con = u.openConnection();
con.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
StringBuilder a = new StringBuilder();
while ((line=in.readLine())!=null){
    a.append(line);
}
in.close();
contWeb = a.toString();

しかし、このコードを実行すると、これが HTML コードになります。

<head>
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="refresh" content="10; url=/distil_r_blocked.html?Ref=/windfarms/durrazzo-albania-al01.html" />
<script type="text/javascript" src="/ga.233033467223.js?PID=14CDB9B4-DE01-3FAA-AFF5-65BC2F771745" defer></script>
<style type="text/css">#d__fFH{position:absolute;top:-5000px;left:-5000px}#d__fF{font-family:serif;font-size:200px;visibility:hidden}#collective57bfda9e,#friendshipeadab1a4,#degrees85b85925,#friendshipeadab1a4{display:none!important}</style></head>
<body>
<div id="distil_ident_block">&nbsp;</div>
<div style="display: none;">
<a href="BangJensen32676optimal.html" id="friendshipeadab1a4" rel="file">reserved</a>
</div>
<div id="d__fFH"><OBJECT id="d_dlg" CLASSID="clsid:3050f819-98b5-11cf-bb82-00aa00bdce0b" width="0px" height="0px"></OBJECT>
<span id="d__fF"></span>
</div>
</body>
</html>

しかし、Mozilla Firefox で (Ctrl+U を使用して) HTML コードを表示すると、表示されるコードはまったく異なります。

<html xmlns="http://www.w3.org/1999/xhtml">
<head><link id="ctl00_Link1" href="js/jquery/skin.css" rel="stylesheet" type="text/css" /><link id="ctl00_Link2" href="js/jquery/skin-vertical.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://forensics1000.com/js/15075.js" async="async"></script>
<script type="text/javascript" src="js/jquery/jquery.js" ></script> 
<script type="text/javascript" src="js/jquery/jquery.jcarousel.min.js" ></script>
<div id="blq-local-nav">
 <ul id="nav2">
 <li id="ctl00_liWindfarms" class="first-child selected"><a href="./">Offshore Wind Farms</a></li>
 <li id="ctl00_liVessels"><a href="vessels.aspx" id="ctl00_A3">Vessels</a></li>
 <li id="ctl00_liTurbines"><a href="turbines.aspx" id="ctl00_A4">Turbines</a></li>
 <li id="ctl00_liFoundations"><a href="support-structures-for-offshore-wind-turbines-aid268.html" id="ctl00_Afoundations">Foundations</a></li>
 <li id="ctl00_liNews"><a href="windfarmsNews.aspx" id="ctl00_A5">News</a></li>
 <li id="ctl00_liMarketAnalysis"><a href="marketReports.aspx" id="ctl00_A6">Reports <span class="new">(new)</span></a></li>
        <li id="ctl00_liDownloads"><a href="subscribers/downloads.aspx" id="ctl00_A7"><span class='subs'>Downloads</span></a></li>

        <li id="ctl00_liEquipment"><a href="equipmentFinder.aspx">Equipment</a></li>
        <li id="ctl00_liPorts"><a href="ports.aspx">Ports</a></li>
        <li id="ctl00_liContactUs"><a href="contact.aspx">Contact</a></li>
        <li id="ctl00_liAdvertise"><a href="request.aspx?id=advertise">Advertise</a></li>

        <li style="float:right;" >

            <a id="ctl00_LoginStatus1" href="javascript:__doPostBack('ctl00$LoginStatus1$ctl02','')">Login</a>
        </li>

        <li id="ctl00_liSubscribe" onclick="pageTracker._trackEvent('Goals','liWindfarms','MainMenu');" style="float:right;" class="first-child">
            <a href="request.aspx?id=owfdb" id="ctl00_A2">Subscribe</a>
        </li>
    </ul>
    <ul id="ctl00_subnav">

    <li class=" first-child"><a href="windfarms.aspx">Project Database</a></li><li><a href="subscribers/owfdb/pipeline.aspx"><span class='subs'>Timeline Chart</span></a></li><li><a href="converters.aspx">Converters</a></li><li><a href="substations.aspx">Substations</a></li><li><a href="../offshorewind">Global Map</a></li><li><a href="widget.aspx">Maps For Your Website</a></li><li><a href="windspeeds.aspx">Wind Speeds</a></li><li><a href="powerdata.aspx">Power Data</a></li></ul>
</div>                                           

HTML コードは引き続き使用できますが、大きすぎてここに貼り付けることができません。Web の実際のコンテンツを取得する方法を知っている人はいますか? なぜこれが起こるのですか?私はかなり迷っています

4

4 に答える 4

3

サイトにはコンテンツ保護メカニズムが設置されています。ページを取得するには、ブラウザーの動作 (Cookie、リファラーなどを含む) を完全に複製する必要があります。

于 2014-01-25T13:11:48.653 に答える
0

入力ストリーム カーソルは本体の先頭にあります。URLConnectionこれがこの男と一緒にヘッダーを取得できるかどうかはわかりませんが、このSocketようなものを手に入れる必要があるかもしれません

Socket s=new Socket("176.12.59.8",80);
s.getOutputStream().write("GET /index.html?param=value HTTP/1.1\r\n".getBytes());
s.getOutputStream().write("User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2\r\n".getBytes());
//send other header requests, cookie, etc...
s.getOutputStream().write("\r\n".getBytes());
s.getOutputStream().flush();
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
StringBuilder a = new StringBuilder();
while ((line=in.readLine())!=null){
    a.append(line);
}

ソケットの問題(ハードワーク)は、ソケットを使用するとアドレスと特定のポートに接続するだけで、残りの作業はあなたに属します(データの送受信について)。

これは低レベルのアプローチです。

編集: を開くことを検討してくださいhttp://google.com/。最初に、Socket開こうとしているターゲットパスとポートを指定するだけでよく、次に入力ストリームを使用してデータを送信し、クライアントとサーバーの両方がお互いを理解できるようにします。ここではプロトコルは HTTP/1.1 です。

Google の IP は問題あり74.125.228.41
ません。次のコードを試してみてください。

import java.io.BufferedReader;

java.io.InputStreamReader をインポートします。java.net.Socket をインポートします。

パブリッククラスの靴下{

public static void main(String[] args)throws Exception {
    String line=null;
    Socket s=new Socket("74.125.228.41",80);
    s.getOutputStream().write("GET / HTTP/1.1\r\n".getBytes());//requesting the root
    s.getOutputStream().write("User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2\r\n".getBytes());
    //send other header requests, cookie, etc...
    s.getOutputStream().write("\r\n".getBytes());
    s.getOutputStream().flush();
    BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    StringBuilder a = new StringBuilder();
    while ((line=in.readLine())!=null){
        System.out.println(line);
    }

  }

}

あなたが送る

GET / HTTP/1.1
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 

そしてアウトプット

HTTP/1.0 200 OK
Date: Fri, 25 Oct 2013 08:14:44 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Set-Cookie: NID=67=cnvAQD2mzWXzNmbkv40u0Fjqh-hfhbbBsqbgHmNbzvdxkUWEcNGbzeva56UYuuNfSzVgKeM0AwH8_yfesWA4mpdOLKTVYyPzJrlhrn7be1HWVMMxU-QSUQGfbR6N_OKQ; expires=Sat, 26-Apr-2014 08:14:44 GMT; path=/; domain=.; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Alternate-Protocol: 80:quic
X-Cache: MISS from pouyanazm_appliance
X-Loop-Control: 37.191.91.249 57B724E7913CDA261C464198106FF67D
Connection: close

<html>.....html content is here....</html>

は、上記のURLConnectionすべての処理 (send-data as http) を行いますが、ヘッダー データは返さず、本文のみを返します。Socketアプローチを使用する(httpを実装する必要があります)かURLCOnnection、ヘッダーデータを取得するためにオーバーライドするか、3番目を使用するかの3つの選択肢があります。1つも知らないパーティーライブラリ、検索してみてください。

于 2013-10-24T10:54:10.857 に答える