qq_28479035
2018-06-03 13:48
采纳率: 71.4%
浏览 2.1k
已采纳

java 通过new URL获取指定页面的数据

通过new URL()的方式可以获取网页内容,可是目前想获取的网站 需要登录后才能显示的table内容
从java代码里进入指定的页面没有登录,指定页面没有登录状态无法获取

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

12条回答 默认 最新

  • threenewbee 2018-06-03 14:30
    已采纳

    不同的网站具体登录的方法不同,不能给出一个通用的代码。

    这里有个登录cnblog网站的例子:
    https://www.cnblogs.com/zhangtingkuo/p/3968450.html

    关键代码:
    Cookie[] cookies = httpClient.getState().getCookies();
    这里得到登录的cookie

    然后
    GetMethod getMethod = new GetMethod(dataUrl);
    这样得到的dataUrl的内容,就是登录以后才有的。

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • pwy1024 2018-06-03 13:54

    可以研究一下使用http client来完成这个功能,登录涉及到会话session,无状态的访问用URL这种方式应该搞不定。

    评论
    解决 无用
    打赏 举报
  • pwy1024 2018-06-03 13:55

    有状态的访问 敲错了 尴尬。。

    评论
    解决 无用
    打赏 举报
  • oyljerry 2018-06-03 13:56

    先研究一下网站保持登陆session的cookie等,这样后面请求URL的时候也带上cookie

    评论
    解决 无用
    打赏 举报
  • weixin_41497737 2018-06-03 14:30

    该项目配置了拦截器,并且并没有开放这个资源.在你请求任何一个资源的时候,
    他都会判断这个资源有没有开放,如果开放了,你就可以进行访问了.如果没有开
    放,你就得登陆之后并确定你有这个权限的时候,才让你请求.才可以访问该资源.
    这也就是你使用new URL("统一资源定位符")不能访问该资源的原因.

    如果你非要用这种方式访问 , 那么我想只有一种情况可以实现,那就是登陆的时候
    只需要登录名和密码,不需要验证码.不过我估计悬的很,哪个网站会这么做啊?

    如果是的话就可以进行下面的操作了,你先注册个账号,在开发者工具中,找到登陆请
    求的URL路径.拼接一下账户和密码,用new URL 请求.登陆之后在进行请求html 的操作.

    评论
    解决 无用
    打赏 举报
  • Carol_1233 2018-06-03 14:37

    可以通过设置User-Agent来欺骗服务器。

    评论
    解决 无用
    打赏 举报
  • qq_42267954 2018-06-03 15:14

    首先打开网页,再按F12查看源码;

    然后抓取你想要的标签,注入LinkedHashMap里面就ok了,很简单是吧!看看例子:

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.*;
    /**

    • Created by chunmiao on 17-3-10. */ public class ReadBaiduSearch { //储存返回结果 private LinkedHashMap mapOfBaike; //获取搜索信息 public LinkedHashMap getInfomationOfBaike(String infomationWords) throws IOException { mapOfBaike = getResult(infomationWords); return mapOfBaike; } //通过网络链接获取信息 private static LinkedHashMap getResult(String keywords) throws IOException { //搜索的url String keyUrl = "http://baike.baidu.com/search?word=" + keywords; //搜索词条的节点 String startNode = "
      "; //词条的链接关键字 String keyOfHref = "href=\""; //词条的标题关键字 String keyOfTitle = "target=\"_blank\">"; String endNode = "
      "; boolean isNode = false; String title; String href; String rLine; LinkedHashMap keyMap = new LinkedHashMap(); //开始网络请求 URL url = new URL(keyUrl); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); InputStreamReader inputStreamReader = new InputStreamReader(urlConnection.getInputStream(),"utf-8"); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); //读取网页内容 while ((rLine = bufferedReader.readLine()) != null){ //判断目标节点是否出现 if(rLine.contains(startNode)){ isNode = true; } //若目标节点出现,则开始抓取数据 if (isNode){ //若目标结束节点出现,则结束读取,节省读取时间 if (rLine.contains(endNode)) { //关闭读取流 bufferedReader.close(); inputStreamReader.close(); break; } //若值为空则不读取 if (((title = getName(rLine,keyOfTitle)) != "") && ((href = getHref(rLine,keyOfHref)) != "")){ keyMap.put(title,href); } } } return keyMap; } //获取词条对应的url private static String getHref(String rLine,String keyOfHref){ String baikeUrl = "http://baike.baidu.com"; String result = ""; if(rLine.contains(keyOfHref)){ //获取url for (int j = rLine.indexOf(keyOfHref) + keyOfHref.length();j < rLine.length()&&(rLine.charAt(j) != '\"');j ++){ result += rLine.charAt(j); } //获取的url中可能不含baikeUrl,如果没有则在头部添加一个 if(!result.contains(baikeUrl)){ result = baikeUrl + result; } } return result; } //获取词条对应的名称 private static String getName(String rLine,String keyOfTitle){ String result = ""; //获取标题内容 if(rLine.contains(keyOfTitle)){ result = rLine.substring(rLine.indexOf(keyOfTitle) + keyOfTitle.length(),rLine.length()); //将标题中的内容含有的标签去掉 result = result.replaceAll("|||",""); } return result; } }
    评论
    解决 无用
    打赏 举报
  • kk1924 2018-06-04 00:35

    这不就是传说中的爬虫吗???
    你需要什么内容???我想这个东西会不会对你有帮助?
    https://blog.csdn.net/android_app/article/details/80454623

    评论
    解决 无用
    打赏 举报
  • 两小壳子 2018-06-04 00:59
    评论
    解决 无用
    打赏 举报
  • beckyz 2018-06-04 02:15

    python爬虫走一个

    评论
    解决 无用
    打赏 举报
  • qq_28479035 2018-06-05 07:26

    网站有验证码 一直搞不进去

    评论
    解决 无用
    打赏 举报
  • qq_28479035 2018-06-13 01:47

    谢谢大家,这两天有点私事没来, 这个问题我用的http client 创建了个模拟浏览器 给HttpGet get = new HttpGet(newUrl); 传浏览器参数,get.addHeader(new BasicHeader("Cookie","admin_username=; safedog-flow-item=; PHPSESSID=QW65SFE32625SGE525SDEFS52)); 这种方法 实现了我的需求

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题