前言:
最近是真的有点闲,随手记录一下小白的成长之路。话不多说,下面上干货。主要的方向还是java,正在学习python,所以我现在只介绍java的爬虫实现,后续再更新。。。如果下面所描述的东西有了解的,请直接跳到最后的git地址,自己修改下数据库链接参数,数据库sql附在项目里
ps:有搞不定的网站可以评论找我哦,提供技术支持
一、网页采集工具
百度一下,java的有httpclient、jsoup、webmargic等,python的也有,比如应用广泛的scrapy,还有分布式垂直框架nutch等
二、数据抓取能做什么
抓几百张美女图片,采集新闻、时事、全网搜信息等等,为数据分析提供原材料。反正就是可以业余学点,需要的时候弄着玩。可以借用百度、gogle这些搜索引擎实现很多功能。还可以有下面我所做的。。。
三、抓取法院案件信息、搜集详情、豆瓣、知乎等
举个栗子吧,目标网站:http://12368.szcourt.gov.cn,需要实现的需求,抓取查询人涉案信息
3.1 准备工作:先去抓取代理服务器,放入代理池中,我是从这里抓的http://www.xicidaili.com/,经过筛选,符合要求的才放进去。为啥?因为有些的代理服务器特别坑,毕竟免费的,质量不保证,代理服务器
3.2 所用工具,jsoup+httpclient,这里介绍一下为什么这么用,我尝试学习了5、6个java爬虫工具,selenium貌似功能最强,但是好像对java的兼容不太好,所以把它放在一边了,但基本用法都学会了。他们属于两个不同的工具,都可以实现网页抓取,但是各有优点,也各有缺点,详细信息请问度娘。这里我用htmlunit去抓网页,然后把网页交给jsoup去处理。。。。。好了,后面开始抓
3.3 准备工作做完了,开始敲代码
先设置构建一个爬虫,类似一个无窗口的浏览器
// 设置统一参数
/**
* <p>Description: 设置一个浏览器爬虫对象</p>
/
public WebClient setParams() {
// 爬取前准备工作
// 设置浏览器模型,防止爬虫被禁用
WebClient webClient = new WebClient(BrowserVersion.CHROME);
// 设置web对象的相关参数
// 1 启动JS
webClient.getOptions().setJavaScriptEnabled(true);
// 2 禁用Css,可避免自动二次请求CSS进行渲染
webClient.getOptions().setCssEnabled(false);
//设置代理
/
* ProxyConfig proxyConfig = webClient.getOptions().getProxyConfig();
* proxyConfig.setProxyHost(listserver.get(0));
* proxyConfig.setProxyPort(Integer.parseInt(listserver.get(1)));
*/
//忽略ssl认证
webClient.getOptions().setUseInsecureSSL(true);
// 3 启动重定向
webClient.getOptions().setRedirectEnabled(true);
/* webClient.getOptions().setThrowExceptionOnFailingStatusCode(false); */
// webClient.getOptions().setGeolocationEnabled(true);
// 4 启动cookie管理
webClient.setCookieManager(new CookieManager());
// 5 启动ajax代理
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
// 6 js运行错误时,是否抛出异常
webClient.getOptions().setThrowExceptionOnScriptError(false);
// 7 设置超时
webClient.getOptions().setTimeout(50000);
// 8 设置js执行超时时间
webClient.setJavaScriptTimeout(50000);
return webClient;
}
基本上就是这些设置,根据不同的需要可以自己进行修改,下面就是主要的部分:
public static String getPageMessage(String url, WebClient webClient, String searchparam, String picSavePath,
String picType, String appcode) {
PicRecognize picRecognize = new PicRecognize();
// 获取随机时间