前言

好久没写博客了,打算把之前做的一个电影评分资讯推送的微信开发全程记录一下,适合对网络爬虫、微信开发感兴趣的童鞋。在教程开始之前,我想先引出两个问题(这次写博客假装很有条理的样子= =)

1. 为什么想要抓取ONE电影的数据?

因为我平时本身就喜欢去电影院看电影,所以关注到ONE·APP有电影栏目,而且评分信息一目了然,非常适合我这种人,该看哪一部你懂的~(PS:这是写博客当天截的图,下周末去看82分机器猫,嘿嘿)

当然了,豆瓣电影也有评分,但是感觉那里水军很多,所以数据参考价值不大吧。顺便普及一下,“一个”APP是由韩寒创立的,最初只有文学栏目,2016年初才进军电影行业(相关报道),目的就是让电影打分少一点套路,多一分真诚,用心良苦呀,所以我们就用收下韩寒这份好意吧!

2. 我需要提前准备什么东西?

  • 首先,你得有一台手机(你是不是傻?请忽略这条),如果16g苹果没内存可用安卓模拟器代替。。。(没有别的意思…)
  • 其次,你得有java网络爬虫相关知识,主要是httpclient的使用,解析JSON用的是效率较高的jackson。
  • 最后,你得有微信java开发经验,主要解决数据呈现问题,当然你也可以使用仅用的JAVA EE知识做一个网页来呈现数据。因为不能面面俱到,所以此教程可能不会过多讲解这一块内容,这里推荐慕课网视频教程,建议直奔重点看第五章,十分受用。

对了,先放个图,看下微信开发的功能最终效果,噔噔噔噔~↓

还是像模像样的,前面bb了那么多,下面开始我们的教程吧!


思路

1. 抓取数据(Fidder抓包,手机wifi代理)

2. 分析数据(解析JSON/HTML,提取有用信息)

3. 微信开发(文本消息匹配、被动回复图文)

基本思路是对数据的抓取→分析→处理→呈现,下面以ONE·APP的电影数据为例,本教程会把重点放在前面两part。


实战

1. 抓取数据

前期准备

  1. 下载抓包工具Fiddler:大家到网上去下载就好了,我这里用的是V4.6

  2. 设置Fiddler规则(关键):点Tools->Fiddler Options->HTTPS,勾选Capture HTTPS CONNECTsDecrypt HTTPS traffic这两项,建议勾上ignore server certificate erros (unsafe)保证我们抓包时候不会狂弹窗而影响心情;切换到Connections选项卡,再勾选allow remote computers to connect这项,记住这里出现的Fiddler listens on port端口号是8888(当然这里可以自己改成别的,但是建议不要这样做),之后会用到它。


    设置完必须重启Fiddler

  3. 搭建网络环境:使电脑和手机在同一个局域网下,这个为之后的手机wifi代理做准备。

  4. 查看电脑内网IP:在命令行输入ipconfig查看内网IP,我这里查到是192.168.2.106,先记住,下面会用到。

  5. 设置手机wifi代理(关键):不用手机可能有点不一样,我这里以我的安卓小锤子来做示范。设置->无线网络->已连接的网络详细->高级设置,开启手动HTTP代理,填写代理服务器主机名为电脑内网IP 192.168.2.106,以及代理服务器端口为Fiddler显示的8888。其他系统和型号的手机自己琢磨下吧~

  6. 手机下载“一个”APP:在各大手机应用市场搜索一个ONE韩寒均可下载。

下面开始才是重点

  1. 手机打开“一个”APP,在抓包之前先清理Fiddler刚刚的抓取到的包,方便我们等下筛选。

  2. 点开“电影”栏目,观察Fiddler的抓包情况。到这里你已经成功了一半了,host为wufazhuce.com正是“一个”的域名,而且url为/api/movie/list/0?(这很restful…),可以确定是我们想要的那个请求。
    (但是在实际抓包中,往往会有各种各样的无用信息掺杂在里面,这时候就需要我们去辨别哪些是我们想要的url)

    我们通过直接访问刚刚抓取到的url:http://v3.wufazhuce.com:8000/api/movie/list/0?,打开发现返回的是json格式的数据,正是我们想要的。到此为止,我们的抓取数据part已经完成了,应该不困难吧= =

没有抓取到包可能出现的原因

  1. 电脑和手机不在同一个局域网内
  2. Fiddler设置不对
  3. 手机wifi没有代理成功,可能是填写有误,也可能是手机系统问题
  4. 最有可能的是我之前遇到的问题:设置完代理后,要先关闭APP,再重新打开
  5. 人品问题,自行百度,也欢迎留言哈~

更多API分享

  1. 电影详情:http://v3.wufazhuce.com:8000/api/movie/detail/ID

  2. 首页电影故事:http://v3.wufazhuce.com:8000/api/movie/ID/story/1/0

  3. 全部电影故事:http://v3.wufazhuce.com:8000/api/movie/ID/story/0/0

  4. 热门评论(点赞数) http://v3.wufazhuce.com:8000/api/comment/praise/movie/ID/0

  5. 全部评论(发表时间) http://v3.wufazhuce.com:8000/api/comment/time/movie/ID/0

注意:所有URL中的ID替换为实际的电影ID即可,最后以为参数0所代表的含义代表下标ID,在下文中会提及到,默认写0。


2.分析数据

  1. 我们选择那条请求,查看软件右边的请求详细分析,由于我们事先知道请求返回数据类型是json,所以我们点Inspectors选项卡下的JSON选项卡,如下图。

  2. 我们把有用的信息记录下来,很有必要。
    请求方式&地址:GET http://v3.wufazhuce.com:8000/api/movie/list/0
    备注:url中的最后一个参数代表电影ID下标,用于分页功能,假如你第一页最后一个电影记录的ID是84,那么你再次请求地址http://v3.wufazhuce.com:8000/api/movie/list/84,得到的数据就是从85开始,也就是下一页电影的数据。这里要靠大家软件开发的经验以及亲手尝试过才知道,听不懂也没关系,这一个参数不足以影响我们的开发。你只要知道默认是0,获取最新的电影数据就行了。
    json返回部分有用数据

    {"res": 0,"data": [{"id": "103","title": "哆啦A梦:新·大雄的日本诞生","score": "82","cover": "http://image.wufazhuce.com/FsaiDxnewphDWZvTn021Si22ZaMv"}]
    }
    参数 类型 说明
    res int 返回码:0-成功,1-失败
    data array 数据集合
    • id
    int 电影ID,唯一标识
    • title
    string 电影名
    • score
    int 评分
    • cover
    string 封面地址

当然了,这种是json数据格式的分析过程,这个跟过程跟你得业务有关,而我只需要实现一开始所呈现的那种图片效果,以上这些数据就够了。使用jackson来解析数据。

如果返回的数据是xml格式,也很好办,跟json差不多,使用xstream解析。

如果返回的数据是带视图模型(也就是有页面的),那就要用浏览器审查元素或者查看源代码,细心观察需要爬取的数据都在哪些div里面,观察它或者它的父元素是否有什么标志性的id甚至是class,这样就能通过jsoup解析它们。网页爬虫可以参考我上一篇爬虫文章《基于WebMagic写的一个csdn博客小爬虫》,框架里面用到的就是强大的jsoup。

数据分析完后,接下来就是真正的coding了!


3.微信开发

  1. 添加maven依赖(maven配置视频,或者手动下载jar包)

    <!-- HttpClient -->
    <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.6</version>
    </dependency>
    <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.3.6</version>
    </dependency>
    <!-- JSON -->
    <dependency><groupId>org.codehaus.jackson</groupId><artifactId>jackson-mapper-asl</artifactId><version>1.9.13</version>
    </dependency>
    <!-- XML -->
    <dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.7</version>
    </dependency>
    <!-- HTML -->
    <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.9.2</version>
    </dependency>
    <!-- IO -->
    <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version>
    </dependency>
  2. 添加wx-tools.jar(我一个室友写的框架,下载jar包,查看官方文档,3分钟上手教程)
    当然了,如果嫌麻烦你可以不使用任何的微信后台框架,如果没学习过微信java开发的请移步到慕课网视频教程,直奔重点看第五章。

  3. 编写爬虫业务(重点)

    package com.soecode.xfshxzs.service;/*** 电影爬虫业务*/
    public class MovieService {// 电影列表URLprivate static final String MOVIE_LIST_URL = "http://v3.wufazhuce.com:8000/api/movie/list/0";/*** 获取电影列表* * @return*/public List<Movie> getMovieList() {List<Movie> list = new ArrayList<Movie>();try {String json = HttpUitl.doGet(MOVIE_LIST_URL);ObjectMapper mapper = new ObjectMapper();JsonNode root = mapper.readTree(json);JsonNode data = root.path("data");if (data.isArray()) {for (JsonNode node : data) {Movie movie = mapper.readValue(node, Movie.class);list.add(movie);}}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return list;}}

    自己写的一个HTTP工具类,拥有doGet方法,实现了传入一个url,输出网页字符串文本。

    package com.soecode.xfshxzs.util;/*** HTTP工具类*/
    public class HttpUitl {/*** 普通GET请求* * @param uri* @return* @throws IOException* @throws ClientProtocolException*/public static String doGet(String uri) throws ClientProtocolException, IOException {String html = null;CloseableHttpClient httpClient = HttpClients.createDefault();HttpGet httpGet = new HttpGet(uri);CloseableHttpResponse response = httpClient.execute(httpGet);HttpEntity entity = response.getEntity();if (entity != null) {html = EntityUtils.toString(entity);EntityUtils.consume(entity);}httpGet.releaseConnection();response.close();return html;}}
  4. 编写处理器:调用业务方法,实现星星效果,装配图文消息,发送给用户

    package com.soecode.xfshxzs.handler;/*** 电影消息处理器*/
    public class MovieMessageHandler implements WxMessageHandler {private MovieService movieService = new MovieService();public WxXmlOutMessage handle(WxXmlMessage wxMessage, Map<String, Object> context, WxService wxService)throws WxErrorException {String content = wxMessage.getContent();List<Movie> list = movieService.getMovieList();for (int i = 0; i < 8; i++) {Item item = new Item();item.setTitle(movieDetail.getScore() + "分 " + createStarsByScore(movieDetail.getScore()) + " | "+ movieDetail.getTitle());item.setPicUrl(movieDetail.getDetailcover());builder.addArticle(item);}return WxXmlOutMessage.NEWS().toUser(wxMessage.getFromUserName()).fromUser(wxMessage.getToUserName()).build();}/*** 根据分数创建星星* * @param score* @return*/private String createStarsByScore(int score) {String stars = "";int solidStarsNum = Math.floorDiv(score + 10, 20);for (int i = 0; i < solidStarsNum; i++) {stars += "★";}int hollowStarsNum = 5 - solidStarsNum;for (int i = 0; i < hollowStarsNum; i++) {stars += "☆";}return stars;}}
    
  5. 新建拦截规则:匹配文本类消息“电影”,看不懂也没关系,真的没关系= =

    router.rule().async(false).msgType(WxConsts.XML_MSG_TEXT).rContent("电影").handler(new MovieMessageHandler()).end();
  6. 剩下就是微信服务器验证了,在开发过程中我们应该本地调试过才放到自己服务器上,之前使用的内网映射(穿透)工具ngrok(怀念一下)不知道何时用不了了,所以一直在用很不稳定的花生壳,大家自己选择吧。到此为止,我们的教程已经顺利完成了,此处应有掌声,啪啪啪啪~

要源码请继续往下看↓


后记

教程中只涉及到了电影资讯的爬虫,还有查天气、查快递等更多功能请关注公众号尽情调戏(好像有BUG?),仅作为一个DEMO参考。放二维码目的不是为了增粉啊,真的不是啊,只是想演示以上教程,赶紧扫吧~

这个微信公众号的java源码我已经放到了我的GitHub上了,大家可以下载参考,互相交流学习~
https://github.com/liyifeng1994/xfshxzs

很感谢大家能够看到这里,你们的每一个阅读量都是对我莫大的鼓励!(如果能去github给个赞就更好啦~嘻嘻~)

哦对了,说到电影,我要顺便给你们一点福(an)利,以下是我的电影日常= =。
男神福利:如何低价购买电影票?(知乎网友攻略)
宅男福利:高清控联盟(专注高清蓝光)

凌晨了,要睡觉了,又写到这么晚= = 以后不能再这样了!!
在接下来的大学里最后一个暑假,我要好好看完刚从图书馆里借来的两本书,加油!fighting!!

利用Fiddler手机抓包对ONE·APP网页爬虫实现电影资讯微信Java开发相关推荐

  1. 利用Fiddler手机抓包对ONE APP网页爬虫实现电影资讯微信Java开发

    前言 好久没写博客了,打算把之前做的一个电影评分资讯推送的微信开发全程记录一下,适合对网络爬虫.微信开发感兴趣的童鞋.在教程开始之前,我想先引出两个问题(这次写博客假装很有条理的样子= =) 1. 为 ...

  2. android 监听本机网络请求_fiddler如何抓取https请求实现fiddler手机抓包-证书安装失败100%解决...

    一.HTTP协议和HTTPS协议. (1) HTTPS协议=HTTP协议+SSL协议,默认端口:443 (2) HTTP协议(HyperText Transfer Protocol):超文本传输协议. ...

  3. fiddler手机抓包教程及电脑断网的配置方法

    fiddler手机抓包教程及电脑断网的配置方法 fiddler手机抓包原理 前提条件: 设置fiddler 1.打开安装好的的fiddler,打开Tools-Options 2.HTTPS设置如下图 ...

  4. fiddler手机抓包配置方法

    一.下载工具包 百度搜索"fiddler 下载" ,安装最新版本 下载的软件安装包为"fiddler_4.6.20171.26113_setup.exe"格式, ...

  5. 使用Fiddler手机抓包https-----重要

    Fiddler不仅可以对手机进行抓包,还可以抓取别的电脑的请求包,今天就想讲一讲使用Fiddler手机抓包! 使用Fiddler手机抓包有两个条件: 一:手机连的网络或WiFi必须和电脑(使用fidd ...

  6. 【建站系列教程】2.2、fiddler手机抓包教程

    [建站系列教程]2.2.fiddler手机抓包教程 (全网最良心.实用教程) fiddler手机抓包原理 步骤摘要 详细步骤 1. 安装fiddler.修改配置 2. 电脑和手机连上同一个wifi 3 ...

  7. 台式机fiddler手机抓包

    台式机fiddler手机抓包 因为兴趣,最近研究了一下,如何对手机抓包,自己做个笔记,方便以后查看,现在简单说一下操作流程及操作中遇到的问题. 一.设备 1.无线USB网卡,电脑.手机. 因为手机用f ...

  8. Fiddler 手机抓包 手机联网异常解决方案

    Fiddler 手机抓包 手机联网异常解决方案 参考文章: (1)Fiddler 手机抓包 手机联网异常解决方案 (2)https://www.cnblogs.com/happyburglar/p/6 ...

  9. Fiddler手机抓包指南

    Fiddler手机抓包指南 设置Fiddler 设置可以抓取https 打开Fiddler ------> Options .然后打开的对话框中,选择HTTPS tab页,如图所示: 选择 Co ...

最新文章

  1. 3分钟带你理解深度学习中的RNN和LSTM究竟是什么?
  2. 怎样正确处理WinForm中Listview的ItemCheck事件
  3. py提取文字中的时间_一次提取100个视频中的文案!节省时间有绝招在手视频文案提取...
  4. 理解RTMP、HttpFlv和HLS的正确姿势
  5. java接口+Java支持多继承吗?
  6. 基础算法之二分法查找
  7. 来了!iPhone 12今晚天猫首销:12期分期免息,还送5G流量包
  8. 基于win32的windows画板程序
  9. linux的shell键盘输入,linux shell获取键盘输入
  10. DNS服务双解析邮箱地址
  11. CentOS6.5配置网络
  12. 【转】Skyline软件介绍
  13. 怎样才能通过c语言二级考试,如何一次就通过全国计算机二级C语言考试,高分技巧四部曲...
  14. C++ 排列组合问题
  15. android微信连wifi设置,微信小程序实现连接wifi功能的方法
  16. PopupWindow需要设置边距
  17. 荣耀8一下显示无服务器,买到荣耀手机后,不打开这七个功能你就亏了!
  18. Node开发后台API接口项目
  19. (转)Linux下管道的原理
  20. Golang源码探究 —— 网络轮询器netpoller

热门文章

  1. 汉语言文学计算机考试内容及答案,河南自考汉语言文学专业《计算机实践》课程考试大纲...
  2. 基于Java web的购物商城
  3. 将数据集Voc .xml转为Matlab 的GroundTruth
  4. 工业工程运用计算机,工业工程如何面对挑战-精选.doc
  5. 【转】你的模型真的陷入局部最优点了吗?
  6. PS入门基础教程之简单背景抠图讲解,建议收藏!
  7. Android之4.0新特性
  8. fastadmin实现导出Excel和导入Excel数据
  9. BootStrap-Table主子表
  10. 屡教不改!这四大运营商仍在出卖用户位置数据...