Java Webソースとアナログブラウザリクエストの取得(個人概要)
Javaはソースコードを取得して自分で知っているいくつかの方法をまとめます.
1:GetSourceCode.java
または
2.test1.java
注意:
得られたソースファイルが保存されて実行されると、文字化けします.符号化の問題のためです.変更を試みることができます
ソースファイルヘッダの符号化は、GBK等であればよい.
以上の2つの方法でページのソースコードを得ることができます.
要求パラメータのあるページについては、次のようにします.
test 1クラスのurlは、get方式でコミットされたurlを持つパラメータ付き接続を要求します.
返されるソースコードには、私たちが望んでいるデータがない可能性があります.
個人的には、このページの多くは別のページに配置されていることがわかります.
返されたソースファイルでjsで動的にページを移動し、動的データを取得してこのページにロードします.
firebugなどのツールでこのページを捕まえることができます.
解析に必要な動的データを解析します.
もちろん個人的にはこのような仕事は、お勧めではありません.実現しにくい.
上記のget方式のコミットではurlの後ろに直接パラメータを追加できます.次はpost方式でデータをコミットして要求します.
1.Test.java
1:GetSourceCode.java
package kalision;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class GetSourceCode {
public static void main(String[] args) throws IOException {
HttpURLConnection huc;
URL myurl = new URL("http://www.baidu.com"); // 。
huc = (HttpURLConnection) myurl.openConnection();
BufferedReader in;
in = new BufferedReader(new InputStreamReader(huc.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
}
}
または
2.test1.java
package kalision;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;
public class test1 {
/**
* @param args
*/
public static void main(String[] args) {
try {
URL url = new URL("http://train.qunar.com/stationToStation.htm?fromStation=%E6%B5%8E%E5%8D%97&toStation=%E7%83%9F%E5%8F%B0&date=2012-01-08");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
InputStream in = null;
in = url.openStream();
String content = pipe(in,"utf-8");
System.out.println(content);
} catch (Exception e) {
e.printStackTrace();
}
}
static String pipe(InputStream in,String charset) throws IOException {
StringBuffer s = new StringBuffer();
if(charset==null||"".equals(charset)){
charset="utf-8";
}
String rLine = null;
BufferedReader bReader = new BufferedReader(new InputStreamReader(in,charset));
PrintWriter pw = null;
FileOutputStream fo = new FileOutputStream("../index.html");
OutputStreamWriter writer = new OutputStreamWriter(fo, "utf-8");
pw = new PrintWriter(writer);
while ( (rLine = bReader.readLine()) != null) {
String tmp_rLine = rLine;
int str_len = tmp_rLine.length();
if (str_len > 0) {
s.append(tmp_rLine);
pw.println(tmp_rLine);
pw.flush();
}
tmp_rLine = null;
}
in.close();
pw.close();
return s.toString();
}
}
注意:
得られたソースファイルが保存されて実行されると、文字化けします.符号化の問題のためです.変更を試みることができます
ソースファイルヘッダの符号化は、GBK等であればよい.
以上の2つの方法でページのソースコードを得ることができます.
要求パラメータのあるページについては、次のようにします.
test 1クラスのurlは、get方式でコミットされたurlを持つパラメータ付き接続を要求します.
返されるソースコードには、私たちが望んでいるデータがない可能性があります.
個人的には、このページの多くは別のページに配置されていることがわかります.
返されたソースファイルでjsで動的にページを移動し、動的データを取得してこのページにロードします.
firebugなどのツールでこのページを捕まえることができます.
解析に必要な動的データを解析します.
もちろん個人的にはこのような仕事は、お勧めではありません.実現しにくい.
上記のget方式のコミットではurlの後ろに直接パラメータを追加できます.次はpost方式でデータをコミットして要求します.
1.Test.java
import java.util.Properties;
public class Test {
public static void testRequestPostStringByteArray() throws Exception {
Properties requestProperties = new Properties();
//
requestProperties
.put(
"User-Agent",
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; TencentTraveler ; .NET CLR 1.1.4322)");
byte[] b = HtmlPost.requestPost("http://train.qunar.com/stationToStation.htm?fromStation=%E5%8C%97%E4%BA%AC&toStation=%E4%B8%8A%E6%B5%B7&date=2012-01-01",
"XML".getBytes());
System.err.println(new String(b, "utf-8"));
}
/**
* Test method for
* {@link org.zlex.commons.net.NetUtils#requestPostForm(java.lang.String, java.util.Properties)}
* .
*/
public static void testRequestPostForm() throws Exception {
Properties formProperties = new Properties();
formProperties.put("ictN", "5924");
formProperties.put("fdl", "");
formProperties.put("lx", "00");
formProperties.put("nyear3", "2011");
formProperties.put("nyear3_new_value", "true");
formProperties.put("nmonth3", "12");
formProperties.put("nmonth3_new_value", "true");
formProperties.put("nday3", "27");
formProperties.put("nday3_new_value", "false");
formProperties.put("startStation_ticketLeft", "6d4e53e80482a0b7");
formProperties.put("startStation_ticketLeft_new_value", "true");
formProperties.put("arriveStation_ticketLeft", "53174e1300e781a2");
formProperties.put("arriveStation_ticketLeft_new_value", "true");
formProperties.put("trainCode", "");
formProperties.put("trainCode_new_value", "true");
formProperties.put("rFlag", "1");
formProperties.put("name_ckball", "value_ckball");
formProperties.put("tFlagDC", "DC");
formProperties.put("tFlagZ", "Z");
formProperties.put("tFlagT", "T");
formProperties.put("tFlagK", "K");
formProperties.put("tFlagPK", "PK");
formProperties.put("tFlagPKE", "PKE");
formProperties.put("tFlagLK", "LK");
formProperties.put("randCode", "BYHJ");
byte[] b = HtmlPost.requestPostForm(
"http://dynamic.12306.cn/TrainQuery/iframeLeftTicketByStation.jsp",
formProperties);
// byte[] b = HtmlPost.requestPostForm(
// "http://train.qunar.com/stationToStation.htm?fromStation=%E5%8C%97%E4%BA%AC&toStation=%E5%B9%BF%E5%B7%9E&date=2011-12-31",
// formProperties);
//
System.err.println(new String(b, "utf-8"));
}
public static void main(String args[]){
try {
testRequestPostForm();
// testRequestPostStringByteArray();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}