网络爬虫当中暗网爬取初探

转载----http://daoexception.javaeye.com/blog/539473

众所周知,网络爬虫的最基本原理就是模拟HTTP协议向指定网站发送请求,从而从服务器端返回的网页源代码中抽取具有实用价值的信息(也可能下一次 任务队列的地址)。这中间涉及到很多算法,根据网站不同域名,网站网页更新速度,网站结构深度,设定爬虫不同的爬取策略。爬虫可以从一些简单的网站上直接 获取网页源代码,从而对网页源代码进行分析。但是对于一些需要用户登录的网站,要抓取网站当中被保护的数据具有一定的困难。今天要说就是一个从需要登录的 网站上获取收保护数据的方法。

        按照现实生活中的方法,需要获取这些数据,我们首先需要登录这个网站,然后才能访问这个网站当中受保护的数据。好了,话题回来,我们想想,在服务器端网 站是如何记录当前用户是否合法(是否已经登录了呢),很简单撒,session,这个我想是大家肯定都知道的方法了。原理很简单,我们访问一个网站,网站 在我们首次访问的时候,会返回一个cookies信息。这个信息相当于我们在这个网站的一个登录信息。我们每次访问该网站的时候需要带上这个 cookies信息,以便让该网站很容易的识别我们先前已经登录该网站了。

        其实步骤很简单,我们需要访问该网站,获取和这个网站会话的cookies信息。然后带这个这个合法的cookies信息重新登录该网站,登录成功后, 会在服务器端产生一个保存用户信息的session。以后我们只需每次访问该网站带上合法的cookies信息,服务器端会根据cookies来判别我们 是否是合法用户(当前用户信息是否存在session当中)。如果合法我们就可以顺利获取该受保护的网站内容。

         用java来实现一个简单的代码。从指定网站当中获取需要的cookies信息

 
  1. URL url_con;  
  2.         HttpURLConnection http_con = null;  
  3.         try {  
  4.             url_con = new URL(url);  
  5.             http_con = (HttpURLConnection) url_con.openConnection();  
  6.             //构造请求信息,对于安全性稍微高一些的网站,构造此类的请求头信息是必须的,第一次请求不带正确的cookies 信息  
  7.             http_con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.0; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)");  
  8.             http_con.setRequestProperty("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");  
  9.             http_con.setRequestProperty("Accept-Charset", "GB2312,utf-8;q=0.7,*;q=0.7");  
  10.             http_con.setRequestProperty("Accept-Language", "zh-cn,zh;q=0.5");  
  11.             http_con.setRequestProperty("Host", "search.cnipr.com");  
  12.             http_con.setRequestProperty("Accept-Encoding", "gzip,deflate");  
  13.             http_con.setRequestProperty("Keep-Alive", "300");  
  14.             http_con.setRequestProperty("Connection", "keep-alive");  
  15.             http_con.setRequestProperty("Cookie", "cizi=2");  
  16.             http_con.setRequestProperty("Referer","http://www.cnipr.com/top_js.htm");  
  17.             //设置请求方式为get请求  
  18.             http_con.setDoInput(true);  
  19.             http_con.setDoOutput(true);  
  20.             http_con.setRequestMethod("GET");  
  21.             //建立和服务器之间的连接。  
  22.             http_con.connect();  
  23.             String cookieVal = http_con.getHeaderField("Set-Cookie");  
  24.             //获取服务器端传回的jsessionId(对于使用tomcat内核的服务器一般传回此类值)值  
  25.             if (cookieVal != null) {  
  26.                 cookiesId = cookieVal.substring(0, cookieVal.indexOf(";"));  
  27.             }  
  28.         } catch (Exception e) {  
  29.             e.printStackTrace();  
  30.             getCookies() ;  
  31.         }  
  32. 很简单,我们获得cookies以后呢,重新登录该网站,当然别忘了在HTTP请求头加上需要的cookies信息啊。就是我们获取的 cookiesId。这样就可以顺利登录。以后每次请求都需要带上该ID。这样我们就可以抓取需要的网页信息

转载于:https://www.cnblogs.com/chp008/archive/2010/05/20/1740195.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值