关于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! :) 展开
学校布置了一个大作业,是用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! :) 展开
2个回答
展开全部
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();
}
网页在控制台显示,并且保存到文件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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
最简单的网络爬虫
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();
}
}
}
如果你要更多功能,那你还可以自己添加。我写的是最简易的爬虫
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();
}
}
}
如果你要更多功能,那你还可以自己添加。我写的是最简易的爬虫
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询