Java HTML抓取一个网站,我有它的身份验证详细信息
因此,我使用以下代码获取特定url的html源代码:Java HTML抓取一个网站,我有它的身份验证详细信息,java,html,authentication,web-scraping,Java,Html,Authentication,Web Scraping,因此,我使用以下代码获取特定url的html源代码: import java.io.*; import java.net.*; public class SourceViewer { public static void main (String[] args) throws IOException{ System.out.print("Enter url of local for viewing html source code: "); BufferedReader
import java.io.*;
import java.net.*;
public class SourceViewer {
public static void main (String[] args) throws IOException{
System.out.print("Enter url of local for viewing html source code: ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String url = br.readLine();
try{
URL u = new URL(url);
HttpURLConnection uc = (HttpURLConnection) u.openConnection();
int code = uc.getResponseCode();
String response = uc.getResponseMessage();
System.out.println("HTTP/1.x " + code + " " + response);
for(int j = 1; ; j++){
String header = uc.getHeaderField(j);
String key = uc.getHeaderFieldKey(j);
if(header == null || key == null)
break;
System.out.println(uc.getHeaderFieldKey(j) + ": " + header);
}
InputStream in = new BufferedInputStream(uc.getInputStream());
Reader r = new InputStreamReader(in);
int c;
while((c = r.read()) != -1){
System.out.print((char)c);
}
}
catch(MalformedURLException ex){
System.err.println(url + " is not a valid URL.");
}
catch(IOException ie){
System.out.println("Input/Output Error: " + ie.getMessage());
}
}
}
此代码适用于wikipedia和其他网站,但对于我的url则不适用。例如:
输入:
输入本地的url以查看html源代码:
输出:
HTTP/1.x 403禁止
设置Cookie:ARPT=LWYYVUShyp1CKIQY;路径=/
X-Powered-By:Servlet/2.5
服务器:Sun GlassFish企业服务器v2.1
设置Cookie:UGROUTE=4c5e7101a68101c06a712650c7352d98;路径=/
P3P:CP=“所有DSP COR CUR ADMa DEVa TAIa PSAa PSDa IVAa IVDa我们的总线UNI-COM导航INT CNT STA
“前”
设置Cookie:UG=zc2qAfg{;路径=/
缓存控制:没有存储,没有缓存,必须重新验证
Pragma:没有缓存
过期日期:0
X-Powered-By:JSF/1.2
X-Powered-By:JSF/1.2
内容类型:text/html;字符集=UTF-8
内容语言:en US
传输编码:分块
日期:2011年2月22日星期二格林威治标准时间16:09:48
输入/输出错误:服务器返回URL的HTTP响应代码:403:
响应代码403表示服务器拒绝授予我刮取权限。我确实拥有登录所需的身份验证详细信息,如果我尝试从浏览器访问url,会弹出一个窗口,要求我重定向到父站点。我想知道是否有办法从我的代码中弹出此窗口
为了避免身份验证问题,我尝试从浏览器登录,然后在仍然登录的情况下运行代码。但是,在运行代码时,我得到了相同的输出。这让我感到困惑,因为登录后将url复制粘贴到浏览器上的另一个选项卡并不要求提供身份验证详细信息,而只是显示数据,这意味着我已经有权限了。有人能告诉我如何刮取url吗?首先,你需要使用一个真正的功能齐全的程序来处理重定向,以及在重定向之前设置的身份验证cookies。你需要模拟浏览器正在做的事情。
HttpURLConnection
在这种情况下,他不能帮你这么做
一个开始诊断您需要设置什么以及如何使用Firefox中的and或Chrome中的
工具->开发人员工具模式的好地方,以查看确切的标题和重定向工作方式,以及设置了什么cookie,并期望在重定向发生时可用。您正在尝试o使用非常简单的刮削程序模拟浏览器。
为了让您在服务器上进行身份验证,您需要使用一个库,例如在登录页面上提交表单。然后,您需要维护会话详细信息,以便您向网站发出的每个请求都可以用于识别您的已验证程序
使用浏览器登录网站,然后尝试使用该程序将不起作用,因为用于识别您(使用浏览器时)的浏览器私人详细信息将与用于识别您的程序的详细信息不同