网页爬虫-通过已登录后的cookie,模拟登陆状态,保持会话进行后续操作

举报
IT 叶新东老师 发表于 2021/12/30 01:47:50 2021/12/30
【摘要】 刚开始的时候打算使用java程序直接登陆网站在进行后续操作,后来发现有些网站的重定向太多不好操作, 所以改用已登录的cookie 来保持会话, 使用方式很简单,只需要在浏览器上登录你要操作的网站,然后获取cookie值,将cookie放到程序里就实现了保存会话的功能了, 1、添加maven 依赖 <dependenc...

刚开始的时候打算使用java程序直接登陆网站在进行后续操作,后来发现有些网站的重定向太多不好操作,

所以改用已登录的cookie 来保持会话,

使用方式很简单,只需要在浏览器上登录你要操作的网站,然后获取cookie值,将cookie放到程序里就实现了保存会话的功能了,

1、添加maven 依赖


  
  1. <dependency>
  2. <groupId>org.apache.httpcomponents</groupId>
  3. <artifactId>httpclient</artifactId>
  4. <version>4.1.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.httpcomponents</groupId>
  8. <artifactId>httpclient-cache</artifactId>
  9. <version>4.1.2</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.httpcomponents</groupId>
  13. <artifactId>httpmime</artifactId>
  14. <version>4.1.2</version>
  15. </dependency>

2、登录网站,然后输入账号密码登录,按下F12功能键(或者在网页空白处右击->检查),

然后会弹出浏览器的调试页面-->  网络  -->  消息头  -->  下面的cookie一栏就是我们要的值了,先把它复制

3、上代码,header添加刚才复制的cookie值


  
  1. package com.html;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import org.apache.http.Header;
  5. import org.apache.http.HttpEntity;
  6. import org.apache.http.HttpResponse;
  7. import org.apache.http.client.methods.HttpGet;
  8. import org.apache.http.impl.client.DefaultHttpClient;
  9. import org.apache.http.message.BasicHeader;
  10. import org.apache.http.util.EntityUtils;
  11. public class HtmlRequest {
  12. public static void main(String[] args) {
  13. //需要爬数据的网页url
  14. String url = "http://www.baidu.com";
  15. Map<String, String> header = new HashMap<String, String>();
  16. //将浏览器的cookie复制到这里
  17. header.put("Cookie", "Hm_lvt_9b04b6953ffb9872983f02eee2929d23=1536065531; Hm_lpvt_9b04b6953ffb9872983f02eee2929d23=1536066013; PHPSESSID=eemc0vbbmbr57d6s9rhvh6rav7; DedeUserID=6745; DedeUserID__ckMd5=ac9f8bd4bd2227be; DedeLoginTime=1536068126; DedeLoginTime__ckMd5=81e100997d01fca8");
  18. System.out.println(httpGet(url, null, header));
  19. }
  20. /**
  21. * 发送 get 请求
  22. *
  23. * @param url
  24. * @param encode
  25. * @param headers
  26. * @return
  27. */
  28. public static String httpGet(String url, String encode, Map<String, String> headers) {
  29. if (encode == null) {
  30. encode = "utf-8";
  31. }
  32. String content = null;
  33. DefaultHttpClient httpclient = new DefaultHttpClient();
  34. HttpGet httpGet = new HttpGet(url);
  35. // 设置 header
  36. Header headerss[] = buildHeader(headers);
  37. if (headerss != null && headerss.length > 0) {
  38. httpGet.setHeaders(headerss);
  39. }
  40. HttpResponse http_response;
  41. try {
  42. http_response = httpclient.execute(httpGet);
  43. HttpEntity entity = http_response.getEntity();
  44. content = EntityUtils.toString(entity, encode);
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. } finally {
  48. //断开连接
  49. // httpGet.releaseConnection();
  50. }
  51. return content;
  52. }
  53. /**
  54. * 组装请求头
  55. *
  56. * @param params
  57. * @return
  58. */
  59. public static Header[] buildHeader(Map<String, String> params) {
  60. Header[] headers = null;
  61. if (params != null && params.size() > 0) {
  62. headers = new BasicHeader[params.size()];
  63. int i = 0;
  64. for (Map.Entry<String, String> entry : params.entrySet()) {
  65. headers[i] = new BasicHeader(entry.getKey(), entry.getValue());
  66. i++;
  67. }
  68. }
  69. return headers;
  70. }
  71. }

4、然后直接运行main方法,打印出已登录网站的html页面数据,

 

总结:使用java实现自动登录并且进行后续操作的功能目前还在研究中,一天进步一点点,rmb在向你招手,

宣传下个人网站:www.huashuku.top

文章来源: yexindong.blog.csdn.net,作者:java叶新东老师,版权归原作者所有,如需转载,请联系作者。

原文链接:yexindong.blog.csdn.net/article/details/82391605

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200