此文copy于掘金大神,因为比较喜欢,就copy过来了。

前言

昨天在公众号查询我房间还剩多少电时,觉得这些操作好繁琐,好麻烦,于是就萌生了用用JAVA把这些数据爬下来的想法。

爬到数据后,可以用这些数据做很多事,接下来就跟大家分享下如何通过Java来实现我的想法,欢迎各位感兴趣的开发者阅读本文。

环境搭建

JDK版本: 1.8

jsoup版本: 1.12.1

编译器: IDEA

项目类型选择Java点下一步

点下一步

填写项目名以及项目路径点击下一步

在src下创建包和lib文件夹

从maven仓库中下载jsoup版本为1.12.1

jar包下载好后,复制到项目的lib目录下,并进行应用获取公众号接口

获取登录接口

打开公众号的首页,选择在浏览器打开,并复制其链接

在PC浏览器打开刚才得到的链接

打开抓包工具,此处使用charles,观察地址栏的url后我们发现登录的参数全在URL里,此时只需要在url里填写我们的手机号和密码然后按回车发起请求// url中loginPhone和password就是我们需要进行填写的参数var url = "http://www.quanfangtong.net/phonehtml/phoneLogin/login.action?loginPhone=xxxxx&password=xxx&conpanyId=Company_20170627113853JMD7cK&language=Chinese";复制代码打开抓包工具,查看拦截到的请求

通过抓包工具,我们获取到了如下信息 1.接口的url地址 2.调用接口需要的参数 3.http的请求报文,从报文中了解到此方法为get请求,以及他header中需要的参数和值复制代码获取电量查询接口

在pc浏览器进行操作,进入到电量查询页面

观察当前浏览器的url,打开抓包工具找到电量查询接口

通过抓包工具,我们获取到了如下信息 1. 登录后返回了cookie过来,每次请求通过cookie来验证身份 2. 请求方式为get复制代码至此,我们拿到了电量查询的接口以及他需要传的参数,接下来我们就用代码来实现抓取吧

编写工具类

在util包下创建JsoupUtils类根据我们上面拿到的接口和http请求报文中的信息,我们通过Jsoup这个插件包来发起请求,把得到的信息进行构造。登录方法,他将返回一个cookie。获取电量信息方法,根据页面的dom结构,找到需要的信息,放入HashMap中,并进行返回。有Jsoup的语法请移步:Jsoup中文文档

package com.lk.util;import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import java.io.IOException;import java.util.HashMap;import java.util.Map;publicclassJsoupUtils {/** * 获取cookie * @param loginUrl * @param data * @return * @throws IOException */public Map jsoupCookieLogin(String loginUrl, HashMap data) throws IOException {// 发起登录请求 Connection.Response login = Jsoup.connect(loginUrl)// 忽略类型验证 .ignoreContentType(true)// 禁止重定向 .followRedirects(false) .postDataCharset("utf-8")// 设置请求头相关信息 .header("Upgrade-Insecure-Requests","1") .header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9") .header("Accept-Encoding","gzip, deflate") .header("Accept-Language","zh-CN,zh;q=0.9,en;q=0.8") .header("Connection","keep-alive") .header("User-Agent","Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Mobile Safari/537.36")// 登录接口需要参数 .data(data)// 登录接口的请求方法 .method(Connection.Method.GET)// 执行 .execute();// 设置字符集编码 login.charset("UTF-8");// 打印接口返回的cookiesreturn login.cookies(); };/** * 获取电量信息 * @param cookie * @param url * @return * @throws IOException */public HashMap getBatteryInfo(Map cookie,String url) throws IOException {// 电量信息 HashMap batteryInfo = new HashMap<>();// 调用电量查询接口,获取返回的Dom Document document = Jsoup.connect(url)// 设置cookies .cookies(cookie) .get();// 解析Dom获取电量信息if (!document.title().equals("错误页面")) {// 今日用电 String electricityToday = document.body().select("div > div > div").eq(2).text();// 剩余电量 String remainingBattery = document.body().select("div > div > div").eq(3).text() + "度";// 本月累计用电 String currentMonthBatteryTotal = document.body().select("div > div > div").eq(5).text();// 统计时间 String time = document.body().select("div > div > div").eq(6).text();// 电量信息赋值 batteryInfo.put("electricityToday", electricityToday); batteryInfo.put("remainingBattery", remainingBattery); batteryInfo.put("currentMonthBatteryTotal", currentMonthBatteryTotal); batteryInfo.put("time", time); batteryInfo.put("code", "0"); batteryInfo.put("msg", "获取成功"); } else { batteryInfo.put("code", "1"); batteryInfo.put("msg", "获取失败"); }return batteryInfo; }}复制代码测试工具类

在httpNetWork包中创建NetWorkTest类,在main方法中调用工具类中的方法进行测试package com.lk.httpNetWork;import com.lk.util.JsoupUtils;import java.io.IOException;import java.util.HashMap;import java.util.Map;publicclassNetWorkTest {publicstaticvoidmain(String[] args) throws IOException {// 接收返回的Cookie Map cookie;// 构造登录参数 HashMap UserInfo = new HashMap<>(); UserInfo.put("loginPhone","****"); UserInfo.put("password","****"); UserInfo.put("conpanyId","Company_20170627113853JMD7cK"); UserInfo.put("language","Chinese"); JsoupUtils jsoupUtils = new JsoupUtils();// 调用cookie登录函数获取cookie cookie = jsoupUtils.jsoupCookieLogin("http://www.quanfangtong.net/phonehtml/phoneLogin/login.action",UserInfo);// 调用获取电量信息方法 HashMap batteryInfo = jsoupUtils.getBatteryInfo(cookie,"http://www.quanfangtong.net/phonehtml/myIntelligent/findMyelec.action");if(batteryInfo.get("code").equals("0")){ System.out.println("今日用电: " + batteryInfo.get("electricityToday")); System.out.println("剩余电量: " + batteryInfo.get("remainingBattery")); System.out.println("本月累计用电: " + batteryInfo.get("currentMonthBatteryTotal")); System.out.println("统计时间: " + batteryInfo.get("time")); }else{ System.out.println(batteryInfo.get("msg")); } }}复制代码执行结果

公众号 采集 java_Java实现公众号数据的抓取相关推荐

  1. 微信公众号数据2019_如何制作微信公众号图文素材 微信公众号采集器好用吗

    现在有很多人都会通过微信公众号来发布文章.图片,这时候就需要使用一些编辑技巧了.下面拓途数据就和大家一同来看看如何制作微信公众号图文素材,微信公众号采集器好用吗? 微信公众号图文素材 如何制作微信公众 ...

  2. 微信公众号采集方案(基于Windows逆向)

    引言 目前主流的公众号采集方案只有以下几种方法 搜狗微信 无法采集历史了,而且搜索也不按时间排序.获取的数据的价值不高,不过可以通过它来获取公众号的biz. 微信公众平台 微信公众平台虽然可采集历史, ...

  3. 大数据信息资料采集:文化公众号槽边往事历史文章搜集评论爬取

    大数据信息资料采集:文化公众号槽边往事历史文章搜集评论爬取 大数据信息资料采集 公众号历史文章采集 公众号评论爬取 微信公众号历史文章导出 抓取微信公众号所有文章. 公众号文章抓取工具 抓取公众号所有 ...

  4. python 下载公众号文章_python3下载公众号历史文章

    最近担心一直关注的公众号的文章突然失踪,心心念念的文章一定要拽住自己手中才好.于是找了各种办法,其实网上有代理采集的,想想为了长久之计还是自己研究一个办法出来. 于是百度谷歌必应各种搜索引擎上手,第一 ...

  5. 公众号抢号_公众号调性是什么意思?公众号排版可以塑造公众号调性吗?

    很多公众号运营人都会谈论的公众号调性是什么,怎么确定公众号的调性呢?一起来看看吧~ 1 怎么确定公众号调性 首先我们来了解一下,公众号的调性到底是什么,公众号调性即我们公众号的整体风格,是由公众号运营 ...

  6. 公众号简单爬虫--把公众号文章全部转载到网站(三)

    公众号简单爬虫--把公众号文章全部转载到网站(三) 根据上一篇的方法,我们得到了一个包含标题,时间,作者,封面,文章连接等信息的json文件.接下来,就是要提取文章详细信息和把一系列的信息写入数据库. ...

  7. 公众号 关注_微信公众号关注图文跳转网页如何操作实现?

    对于微信公众号关注图文跳转网页的场景实现,微号帮平台提供了粉丝关注定时推送功能实现,公众平台提供了开发接口编程实现功能效果,都能实现微信公众号关注图文跳转网页,只要网页能正常在个人微信上打开浏览都能设 ...

  8. 微信公众号数据2019_全国公众号总排名2019,全国微信公众号排名

    全国公众号总排名2019,全国微信公众号排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不 ...

  9. 微信公众号数据2019_微信公众号榜单排名,2020微信公众号排名

    微信公众号榜单排名,2020微信公众号排名 公众号排名优化的注意事项及细节今天给大家分享一下,作为微信公众号的排名优化对于大多数人来说都已经知道了有这个渠道的事情,其实很多的新产品及渠道出来以后有不少 ...

最新文章

  1. Kafka配置SSL(云环境)
  2. Nginx + FastCgi + Spawn-fcgi + c 的架构
  3. ElementUI中的el-select中多选回显数据后没法重新选择和更改
  4. boost::ratio_less_equal相关的测试程序
  5. Linux-查看操作系统信息
  6. Unix操作系统***追踪反击战
  7. RabbitMQ 从入门到精通 (一)
  8. python raise
  9. css转化成stylus,stylus
  10. [NOIp2013] 货车运输
  11. 百练 2972 确定进制 解题报告
  12. python打开jpg照片_python打开图像
  13. em算法 实例 正态分布_人人都能看懂的EM算法推导
  14. android selector
  15. Vray材质速查手册(精讲)
  16. 美国大学计算机科学与物理,美国大学物理专业浅谈
  17. 将阳历转换为阴历php,php将阳历转换为阴历
  18. ac6005直连ap 如何配置_邀请实测搭档 完成AC+瘦AP经典组网_华为 AC6005_网络设备-中关村在线...
  19. C语言学习:一个函数可以有几个返回值?
  20. android通过adb设置以太网共享

热门文章

  1. Chrome 90 里更好的字符串处理机制
  2. SAP Commerce Cloud Spartacus UI 修改 primary color 的方法
  3. 什么是无头电商 - headless commerce
  4. SAP UI5 如何通过 manifest.json 文件定义第三方库依赖关系
  5. occ-backend-base-url 的相关代码,如何调试?
  6. Hybris service layer和SAP CRM WebClient UI架构的横向比较
  7. 给用过SAP CRM中间件的老哥老姐们讲讲SAP CPI
  8. UI5_INFO_FETCH_FROM_DB
  9. SAP CRM Division下载调试
  10. CDATA and comment