关于java 使用 socket 抓取网页的问题。 30

关于java使用socket抓取网页的问题。学校布置了一个大作业,是用javasocket做一个简单的浏览器,需要自己抓取HTML代码然后自己去解析HTML的标签,在做的... 关于java 使用 socket 抓取网页的问题。
学校布置了一个大作业,是用java socket 做一个简单的浏览器,需要自己抓取HTML 代码然后自己去解析HTML的标签,在做的过程中 需要 用GET 的方法去 发送 HTTP HEADER, 然后得到响应,现在有几个问题:
1. 有些是HTTP1.0 有些是HTTP1.1 这个头文件怎么设置 才能得到正确的回应
2, 我在尝试链接GOOGLE的时候, 返回的是302 FOUND,我输入的地址是www.google.com, 期中返回的头文件里有个LOCATION: www.google.co.uk,然后我直接输入www.google.co.uk 还是得到同样的302 FOUND,这个问题困扰我很多天了。怎么样才能解决。

在线等待!!谢谢了。
Happy new year! :)
展开
 我来答
xmigl55
2011-01-10 · TA获得超过3263个赞
知道小有建树答主
回答量:1729
采纳率:50%
帮助的人:761万
展开全部
VC++6.0下控制台项目(不要搞错了)
网页在控制台显示,并且保存到文件baidu.txt

#include <Winsock2.h>
#include <stdio.h>
#include<fstream.h>
#pragma comment( lib , "ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 1, 1 );

err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 )
{
WSACleanup( );
return;
}

SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;

hostent* remoteHost;
char* host_name="";
unsigned int addr;
if (isalpha(host_name[0]))
{ /* host address is a name */
if (host_name[strlen(host_name)-1] == '\n')
host_name[strlen(host_name)-1] = '\0';
remoteHost = gethostbyname(host_name);
}
else
{
addr = inet_addr(host_name);
remoteHost = gethostbyaddr((char *)&addr, 4, AF_INET);
}
memcpy(&addrSrv.sin_addr.S_un.S_addr,remoteHost->h_addr,remoteHost->h_length);
if (WSAGetLastError() != 0)
{
if (WSAGetLastError() == 11001)
printf("Host not found...\nExiting.\n");
}
else
printf("error#:%ld\n", WSAGetLastError());//没有Error

addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(80);
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char recvBuf[1024*200+1]=;

/////////////////////////////////////////////////////////////////////////////////////////

char sendBuff[200]="GET 男人&cl=3 HTTP/1.0\r\nHost:\r\n\r\n";
send(sockClient,sendBuff,strlen(sendBuff),0);

ofstream outfile("baidu.txt",ios::out);
int cc;
cc=recv(sockClient,recvBuf,1024*200,0);
cout<<"接收数据中..."<<endl;
while(cc!=SOCKET_ERROR&&cc>0)
{
cout<<recvBuf;
outfile<<recvBuf;
cc=recv(sockClient,recvBuf,1024*200,0);
}
cout<<"数据接收完毕"<<endl;
outfile.close();
closesocket(sockClient);
WSACleanup();

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
piglijian
2011-01-08 · 超过19用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:45.5万
展开全部
最简单的网络爬虫

public void basicSpider(){
URL url=null;
InputStream in=null;
BufferReader br =null;
String temp=null;
StringBuilder sb=new StringBuilder();
try{
url=new URL("http://www.baidu.com");
in=url.openStream():
br=new BufferReader(new InputStreamReader(in));
while((temp = br.readLine())!=null){
sb.append(temp);
//这样就可以将网络内容下载到本地机器。然后进行数据分析,建立索引。这也是搜索引擎的第一步。

}
System.out.println(sb);

}catch(MalformedURLException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();

}finally{
try{
br.close();

}catch(IOException e ){
e.printStackTrace();
}
try{
in.close();
}catch(IOException e){
e.printStackTrace();
}
}

}

如果你要更多功能,那你还可以自己添加。我写的是最简易的爬虫
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式