主要分4步数据抓取,数据处理 ,图文转换,搜索引擎
主要抓取网页网站题库数据
可抓取题库网,无忧网,新东方题库
技术实现:
利用jsoup抓取相应网站的数据,利用htmlunit模拟客户端抓取数据
通过下面链接可下载Jsoup的jar包
http://central.maven.org/maven2/org/jsoup/jsoup/1.12.1/jsoup-1.12.1.jar
通过下面链接可下载htmlunit的jar包
http://central.maven.org/maven2/net/sourceforge/htmlunit/htmlunit/2.35.0/htmlunit-2.35.0.jar
遇到问题:
js异步加载 :
如组卷网会通过js异步加载导致jsoup第一步抓取的只是一个网站空壳,抓不到想要的数据
可以通过htmlunit技术去模拟浏览器,把js异步加载过程也模拟完成后能获得正确数据
需要登陆:
有些网站一些页面需要登陆操作
可以通过设置hander cookie来跳过登陆,但是cookie部分数据会动态发生改变需要时时注意,
或者通过htmlunit取模拟登陆
访问频率限制:
某些网站对于一个ip有访问次数限制,所以需要正确线程池大小,而且尽量减少一次抓取所需要的访问次数
而且访问次数过多会导致网站连接延迟增加所以要提高连接超时限制
锁账户和ip机制
有些网站会有个动态黑名单,封锁异常多次访问的ip和账户
抓取的数据可能是xml代码,json代码,其中可能带有html特殊字符,所以需要对其去转义,图片地址有可能是不带域名的所以处理的时候得加上域名
百度ocr调用实现
将图片文件进行转码获得一个处理后的字符串
利用百度对每个账户分配的 API Key 和 Secret Key 获得新的accessToken通行证
通过访问这个url可以得到通行证码
再通过http访问百度给的接口,需要在url地址带上通行证信息和图像处理后的字符串
最后获得百度传回的json文件,获得的文件格式为识别的每一行的字,所以好得处理下把每行字取出来合并
百度ocr api有账户次数限制 每个账户5w次/日
开源免费的tesseract的精度太低,需要训练词库,训练词库的方法可以通过下面这个博客学习
https://www.cnblogs.com/wzben/p/5930538.html
技术实现
利用solr框架搭建一个针对题目title的搜索引擎
通过下面链接下载solr相关文件
http://mirror.bit.edu.cn/apache/lucene/solr/8.1.0/solr-8.1.0-src.tgz
配置要点:可查看微博https://www.cnblogs.com/xuyiqing/p/8707966.html
通过官网下载的文件,可直接通过终端启动solr,有几个重要的jar包需要添加,极其重要缺一不可
建立核心,在核心内有两个配置文件需要修改,data-config.xml solrconfig.xml
需要加入ik词库,需要配置scheme文件来修改词库内容
接下来:在刚才提到的schema.xml中配置:加上这一段
新建的这两个域支持IK分析器
启动前得提高solr服务器启动对应的jvm大小,防止因为数据量过大导致内存溢出问题
cmd输入 为虚拟机分配2g大小的内存
导入数据的时候尽量将少量字段导入减少solr读取建立索引的消耗,导入id,title字段通过图片转义的文字对应title,来找到对应id并返回
java调用只需要先建立对solr服务器对应核心的连接然后定义关键词再获得结果响应
把爬取的题库资源上传id和题目两个字段到solr服务器中,
用户把图片资源上传后,通过百度ocr接口把图片转换为文字,