请求JAVA抓取网站数据

网站数据抓取  时间:2021-02-10  阅读:()

J AVA抓取网站数据

JAVA抓取网站数据

可以使用抓取的类库包括JDK自带URL或第三方的HttpClient这里使用URL基础类库访问网络。其实用JDK自带的URL模拟网站请求并返回数据是个模板式的过程只可能有时候碰到多重跳转或重定向而采取多个模板式过程而已。

一般流程类似

1将要模拟的请求地址传递给URL

2通过URL获得一个连接对象 URLConnection或将其转化为子类HttpURLConnection

我常用HttpURLConnection有时候死活连不上可以尝试切换使用呵呵。

3通过setRequestProperty函数来设置请求参数请求方式具体设置哪些参数对应网站有所不同。

4通过连接对象的函数来设置诸如禁止自动跳转重定向超时的时间输入输出设定等。

5调用connect() 开始连接地址。

5如果请求为get,附带参数或post附带表单信息则通过getOutputStream函数传递

这个函数自带connect()过程所以第5步有这方法存在则省略。注output必须在input之前执行否则抛异常。

6通过getResponseCode得到连接并发送参数后返回的状态码可能为跳转地址重定向地址也可能为直接返回数据。

注在第3或4步中设置setInstanceFollowRedirects(false) ;便于分析每次请求后的流程是得到数据还是跳转了地址等等。

200成功连接服务但不表示满足网站的业务需求 比如登录成功等。

301 302跳转或重定向可以通过getHeaderField("location") ;得到接下来转向地址

500与服务器连接失败首先检测User-Agent请求头模拟信息是否准确。

7通过getInputStream()得到请求成功后的信息数据流。

8通过IO可以尝试测试返回的数据信息如果是压缩包或者文件可以通过IO来下载保存

9第一次请求不需要Cookie信息但是如果需要接下来的请求可能会涉及需要登录以后才可以操作的流程所以需要把第一次生成的session传递下去。而且得坚持session的变化保证和网站业务产生的session一致。

//获取生成的cookie

Map<String, List<String>> lookmap = con.getHeaderFields() ;

List<String> lookcookie = lookmap.get("Set-Cookie") ;if(lookcookie!=null)

{

String temp ="";for(String s:lookcookie)

{s=s.replace("path=/", "") ;s=s.replace("Path=/", "") ;temp+=s;

}

弄个静态全局变量去接这个temp也就是session来保持回话。

}

//传递给下一次cookiecon. setRequestProperty("Cookie",cookie) ; 1查看请求参数setRequestProperty需要用到必备的软件

Visual Sniffer用于嗅探网络请求头发送参数和信息 以及响应回来的对应信息。

基本使用

选择要嗅探网站信息所经过的网卡一般都是一张网卡IP地址然后点开始拦截。

当然在拦截前最好把上次嗅探回来的信息删除便于下次分析。

当源主机和目的主机前面的加号图标没有了则表示清空了。

一般在自己打开想要得到网站某个业务的地方后再点击拦截这样省去了前面一堆自己不需要分析的请求信息。

点了拦截接下来就可以去操作网站 比如点击登录登录成功后 回来点击停止拦截。

然后软件会返回该网站登录业务所发送的一些列请求信息和响应信息。

-------------------------------------------------- ----------

--------

下面以嗅探四川航空官方网站为例子介绍该软件的常用方法

网址 http://3u. travelsky.com/

按照上面的步骤

1打开该网站到自己想要嗅探的业务功能位置这里准备嗅探登录过程的网络参数。

2清空软件上次嗅探回来的信息然后点击开始拦截,见上面的图解

3输入账号密码登录成功后 回来点停止拦截

4网页的端口为80展开到主-目 目-主对应的80端口的信息,目地达成。

5备注必须开启系统服务 Internet Connection Sharing (ICS)这个系统服务。否则只能看到响应回来的80端口信息却看不到发送请求的信息而我们真正需要的正是请求信息。

登录成功后

查看软件截取到的信息:

找到80端口上面的是响应信息下面的是请求信息 因为涉及多个请求除了登录可能

包含图片等等的其它要显示的资源请求所以会看到很多个IP-IP的信息

先查看请求端的IP信息 点击后右侧显示信息

比如点第一个

可以看到每一个请求方式GET,POST的位置就表示请求了一次。

如果不知道哪个请求才是我们想要分析的位置则通过对应请求的位置去响应端查看结果。

比如查看第一个请求的结果

那就差不多知道这个请求正是需要的登录参数信息。

接下来就可以把得到的请求参数信息对应的设置到

HttpURLConnection的函数中去。

只要每次请求找对设置无差别一般很容易抓取网站信息除极个别加密或者跳转N次的

网站 比如淘宝跳转无数次才登录。只要一直分析好请求和响应地址模拟过程没问题。

2对应该网站生成连接的方法设定对应的参数public HttpURLConnection get3UHttpURLConnection(String cookie,String ref,String action,String host,String method) throws Exception{

URL cookieUrl=new URL(action) ;//根据请求动作生成URL对象

HttpURLConnection cookiecon=(HttpURLConnection)cookieUrl.openConnection() ;//打开一个连接转化为HttpURLConnectioncookiecon. setInstanceFollowRedirects(false) ;//不让它自动重定向或跳转便于获取每步请求的地址

//设定请求参数,参照Visual Sniffer软件得到的参数信息,照搬cookiecon. setRequestProperty("Host",host) ;

cookiecon. setRequestProperty("User-Agent", "Mozilla /4.0(compatible; MSIE 8.0; Windows NT 5. 1 ; Trident/4.0; .NET CLR

2.0.50727)") ;cookiecon. setRequestProperty("Accept", "image/gif, image/jpeg,image/pjpeg, image/pjpeg, application/x-shockwave-flash,application/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, */*") ;cookiecon. setRequestProperty("Accept-Language", "zh -CN") ;cookiecon. setRequestProperty("Accept-Encoding",

"gzip,deflate") ;cookiecon. setRequestProperty("Content-Type", "application/x-www-form-urlencoded") ;cookiecon. setRequestProperty("Content-Length", "80") ;cookiecon. setRequestProperty("Connection", "Keep-Al ive") ;cookiecon. setRequestProperty("Cache-Control", "no-c ache") ;if(ref!=null) {//大部分不用给参照页不过如果软件嗅探出了就照样写上吧。cookiecon. setRequestProperty("Referer",ref) ;

}if (cookie!=null) {cookiecon. setRequestProperty("Cookie",cookie) ;

}

//设定连接的超时发送方式 已经是否输入输出

cookiecon. setRequestMethod(method) ;cookiecon. setConnectTimeout(30000) ;cookiecon. setReadTimeout(60000) ;cookiecon. setDoOutput(true) ;//注意output必须在input前面cookiecon. setDoInput(true) ;cookiecon. setUseCaches(false) ;return cookiecon; } //输出参数publicvoid sendParams(HttpURLConnection conn,Stringparams)throws Exception

{

OutputStream os = conn.getOutputStream() ;//会自动打开conn,如果不输出参数需要手动conn.connect() ;连接

BufferedWriter bw =new BufferedWriter(new

OutputStreamWriter(os) ) ;bw.write(params) ;bw.flush() ;bw.close() ;os.close() ;

}

测试运行publicstatic void main(String[] args) throws Exception{

String action="http://3u. travelsky.com/3uair/servlet/com.tuet.module. login.LoginServlet";//请求动作地址

String host="3u. travelsky.com";//主机

String ref="http://3u. travelsky.com/3uair/login/index.html";//登陆前的页面-参照页

String method="POST";//请求方式

String cookie=null ;//登陆后取出session现在未有

EachConn ec =new EachConn() ;

//得到对应连接

HttpURLConnection conn =ec.get3UHttpURLConnection(cookie, ref,action, host, method) ;

//设定请求参数涉及保密把账号密码换成了XXXXX而验证码暂时也是乱写的。

String params

="iUserLogin=xxxxx&iPasswd=xxxxx&iValidateNumber=1

234&sltloginOption=frontFlag";

//写入参数一并请求ec. sendParams(conn, params) ;int code =conn.getResponseCode() ;//响应状态码

System.out.println("状态码 "+code) ;

InputStream is = conn.getInputStream() ;//返回的数据信息

BufferedReader br =new BufferedReader(new

InputStreamReader(is, "GBK") ) ;//网站采用GBK显示

String line=null ;while ( (line=br.readLine() ) !=null) {

System.out.println(line) ;

}br.close() ;is.close() ;conn.disconnect() ;//关闭连接

}

上面为返回的信息状态码200这表示成功连接服务器只是涉及业务问题验证码不准确所以返回了这样的错误信息。

如果验证码也准确那么返回的就是登陆后页面的HTML源代码。

能返回网站服务器的信息这表示已经抓取成功。

至于验证码如何获取并通过验证 以后再记录。

41云,服务器8折优惠券,200G TCP防御

41云怎么样?41云是国人主机品牌,目前经营产品有国内外云服务器、CDN(高防CDN)和物理机,其中国内外云服务器又细分小类有香港限流量VPS、香港大带宽VPS、香港弹性自选VPS、香港不限流VPS、香港BGP线路VPS、香港Cera+大带宽机器、美国超防VPS、韩国原生VPS、仁川原生VPS、日本CN2 VPS、枣庄高防VPS和金华高防VPS;物理机有美国Cera服务器、香港单程CN2服务器、香...

Advinservers:美国达拉斯便宜VPS/1核/4GB/80GB SSD/1Gbps不限流量/月付$2.5/美国10Gbps高防服务器/高达3.5TBDDos保护$149.99元/月

Advinservers,国外商家,公司位于新泽西州,似乎刚刚新成立不久,主要提供美国和欧洲地区VPS和独立服务器业务等。现在有几款产品优惠,高达7.5TB的存储VPS和高达3.5TBDDoS保护的美国纽约高防服务器,性价比非常不错,有兴趣的可以关注一下,并且支持Paypal付款。官方网站点击直达官方网站促销产品第一款VPS为预购,预计8月1日交付。CPU为英特尔至强 CPU(X 或 E5)。官方...

老周互联24小时无理由退款,香港原生IP,28元起

老周互联怎么样?老周互联隶属于老周网络科技部旗下,创立于2019年12月份,是一家具有代表性的国人商家。目前主营的产品有云服务器,裸金属服务器。创办一年多以来,我们一直坚持以口碑至上,服务宗旨为理念,为用户提供7*24小时的轮班服务,目前已有上千多家中小型站长选择我们!服务宗旨:老周互联提供7*24小时轮流值班客服,用户24小时内咨询问题可提交工单,我们会在30分钟内为您快速解答!另免费部署服务器...

网站数据抓取为你推荐
邮箱群发邮箱最多能群发多少人google竞价排名哪些搜索引擎没有竞价排名?搜搜?谷歌?手游运营手册和平精英打到王者有什么要求金山杀毒怎么样金山杀毒好吗?1433端口1433端口怎么打开1433端口怎么开启本机1433端口网站联盟百度网盟是什么,怎么加入不兼容vivo手机和软件不兼容怎么办?iphone越狱后怎么恢复苹果手机越狱之后能恢复原来吗?ios7固件下载iOS的固件有正版盗版之分吗?我看到了蜂威网有iOS7的固件想下载试用一下,那里是测试版是正版吗
132邮箱 ion winhost 国外bt win8升级win10正式版 日本空间 免费智能解析 1美金 hkt in域名 七夕快乐英语 美国独立日 重庆电信服务器托管 主机管理系统 服务器防火墙 免费个人网页 宿迁服务器 privatetracker 最新优惠 pptpvpn 更多