Java写的答题助手项目分析与总结(三)

其实前面写的两篇文章已经可以实现搜索了,只要找答案找的快,10秒之内还是可以选对了,但是有些的问题的答案并不是那么容易搜索到,而且是在搜索到的链接里面,当我们再次打开链接时,时间肯定不够,所以就用程序来帮我们找答案吧.

统计分析搜索到的结果
这里写图片描述
从上面的图片中我们可以发现我们搜索到的只是链接,还不是正文,需要再次进入正文部分.

1. 找到每一个链接
这个比较简单,稍微分析一下百度的页面结构,就可以找到每篇文章的链接,这里我用的库是JSoup,可以很方便的解析html页面.

但是等我们找到页面的链接时,就会发现,百度的链接都是加密过的,不能直接使用
比如:
http://www.baidu.com/link?url=5IUPz7MaG0u1QJiGjRupgTYCwMpdQh0NOSvNB2vnE6M_WuYw3MPfJxVrmrgRlbyxSr9Pgly4KhNhVT6bpEg-2HzhqEytd3sXzaogGk7NOdm&wd=&eqid=b40eb8310001f1fb000000025a7d2dd2

实际的链接其实是https://zhidao.baidu.com/question/2012383527471587388.html,那怎么得到解密之后的真实链接呢,我们可以在服务器响应给我们的header部分的Location找到真实的链接.
但是对于百度自家的网站链接如:百度知道,百度文库,百度作业帮等等,在加密之后的链接中会加入一些其他参数,比如上面链接的&wd=&eqid=b40eb8310001f1fb000000025a7d2dd2,如果对整个链接提取header会没有Location,只有把后面的参数都去掉只剩下url参数才可以,所以就加一下判断:

// 简单的截取代码如下
int index = urls.indexOf("&");
if(index!=-1) {
    urls = urls.substring(0, index);
}

假如我们得到的新的url为:
http://www.baidu.com/link?url=5IUPz7MaG0u1QJiGjRupgTYCwMpdQh0NOSvNB2vnE6M_WuYw3MPfJxVrmrgRlbyxSr9Pgly4KhNhVT6bpEg-2HzhqEytd3sXzaogGk7NOdm

HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
HttpURLConnection.setFollowRedirects(false);
String location = conn.getHeaderField("Location");
System.out.println(location);
//输出为:https://zhidao.baidu.com/question/2012383527471587388.html

现在我们已经得到了每个链接的真实url,剩下的就是普通的爬取,分析,提取内容了,
我们把识别到的答案逐个在爬取到的内容中检索,找到次数最多的一般就是正确答案了.
* 但是对于答案是数字,字母的,一般来说就不准确了,因为爬取到网页包含太多的字母和数字,但这些数字和字母并不是有效答案.
* 一般题目中包含否定或反义词的时候,我们要对题目简单删改,因为搜索到的内容一般都是肯定直接的问题.例如:
题目:唐宋八大家不包括以下哪个人?
答案:A.柳宗元 B.苏轼 C.李白
如果我们把题目原封不动搜索,那搜索到的肯定不准确,所以我们就要把”不”字删掉,那么搜索到的就是正面内容,统计分析的选项次数,C选项肯定最少,那么就选最少的那一项.
百度搜索结果页一页有10条信息,一般来说,统计第一页就可以找到答案了,而且越往后搜索结果越不准确,
* 但是10个链接一个一个搜索也还是有点慢的,毕竟我们只有10s的时间,所以我们可以用多线程的方式,10条链接同时分析,只要找到符合选项的,就将此选项频率加一.这样也避免了因某条链接超时而导致搜索中断.
以下为软件运行时的画面:
这里写图片描述
点击选取题目识别区按钮,将会出现一个半透明窗口,将此窗口覆盖在题目上方,右键点击OK即可,同理选取答案识别区只要把窗体覆盖在答案上方.
一切弄好,点击文本识别并search即可搜索题目,左方显示浏览器搜索界面,右侧显示统计到的三个选项的频率.
手机如何投影在电脑上呢?有许多软件都提供这样的服务,我这里用的是Total Control,
这里写图片描述
答案首先参考左边浏览器,其次再参考右边选项频率.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值