【发布时间】:2011-02-22 17:09:32
【问题描述】:
所以我使用下面的代码来获取特定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 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 它不适用。例如:
输入:
输入查看html源码的本地url:http://ntu-edu-sg.campuspack.eu/Groups/SC207-SOFTWARE_ENGINEERING/WikiCPE207_Template_0/Week_11_Software_Testing
输出:
HTTP/1.x 403 禁止 设置 Cookie:ARPT=LWYYVUShyp1CKIQY;路径=/ X-Powered-By:Servlet/2.5 服务器:Sun GlassFish Enterprise Server v2.1 设置 Cookie:UGROUTE=4c5e7101a68101c06a712650c7352d98;路径=/ P3P: CP="ALL DSP COR CUR ADMa DEVa TAIa PSAa PSDa IVAa IVDa OUR BUS UNI COM NAV INT CNT STA 预” 设置 Cookie:UG=zc2qAfg{;路径=/ 缓存控制:无存储、无缓存、必须重新验证 Pragma:无缓存 过期:0 X-Powered-By: JSF/1.2 X-Powered-By: JSF/1.2 内容类型:text/html;charset=UTF-8 内容语言:en-US 传输编码:分块 日期:格林威治标准时间 2011 年 2 月 22 日星期二 16:09:48 输入/输出错误:服务器返回 HTTP 响应代码:403 用于 URL:http://ntu-edu-sg.campuspack.eu/Groups/SC207-SOFTWARE_ENGINEERING/WikiCPE207_Template_0/Week_11_Software_Testing
响应代码 403 表示服务器拒绝我抓取权限。我确实有登录所需的身份验证详细信息,如果我尝试从浏览器访问 url,则会弹出一个窗口,要求我重定向到父站点。我想知道是否有某种方法可以从我的代码中弹出这个窗口。
为了规避身份验证问题,我尝试从浏览器登录,然后在我仍然登录时运行代码。但是,在运行代码时,我得到了相同的输出。这让我很困惑,因为在登录后将 url 复制粘贴到浏览器的另一个选项卡中不会询问身份验证详细信息,而只是显示数据,这意味着我已经拥有权限。有人可以告诉我如何抓取网址吗?
【问题讨论】:
标签: java html authentication web-scraping