爬虫是一种依照一定的规则,自动地抓取万维网信息的程序或者脚本。现在比较适合写网络爬虫的应该是Python,今日给我们介绍一下java编写网络爬虫的简略案例。
代码展现
话不多说,直接上代码
publicclassSpiderService{
publicfinalstaticStringREQUEST_URL=”http://news.sohu.com/”;
publicfinalstaticStringKEYWORD=”^.*疫情.*$”;
publicstaticIntegercount=0;
publicstaticvoidspider(Stringurl)throwsException{
URLrequestUrl=newURL(url);
URLConnectionurlConnection=requestUrl.openConnection();
BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(urlConnection.getInputStream()));
Stringinput=bufferedReader.readLine();
while(input!=null&&count<1000){
Patternp=Pattern.compile(KEYWORD);
Matcherm=p.matcher(input);
while(m.find()){
count++;
StringmatchContent=m.group();
Stringurl1=getUrl(matchContent);
if(!StringUtils.isEmpty(url1)){
spider(url1);
}else{
Stringvalue=getValue(matchContent);
System.out.println(“网址url:”+url+”,内容:”+value);
}
}
input=bufferedReader.readLine();
}
}
privatestaticStringgetUrl(StringmatchContent){
Stringregex=”href=\”(http|https://.*?)[\”\\s]”;
Patternp=Pattern.compile(regex);
Matcherm=p.matcher(matchContent);
Stringcontent=null;
//会存在多个链接,能够用个调集进行存储,这边就简略展现只取一条
if(m.find()){
content=m.group(1);
}
returncontent;
}
privatestaticStringgetValue(StringmatchContent){
Stringregex=”[\\w,,.。\\f\\t\\v\\u4e00-\\u9fa5]*疫情[\\w,,.。\\f\\t\\v\\u4e00-\\u9fa5]*”;
Patternp=Pattern.compile(regex);
Matcherm=p.matcher(matchContent);
Stringcontent=null;
//会存在多个内容,能够用个调集进行存储,这边就简略展现只取一条
if(m.find()){
content=m.group();
}
returncontent;
}
publicstaticvoidmain(String[]args)throwsException{
spider(REQUEST_URL);
}
}
代码说明
1,首先界说一个起始爬取方位即REQUEST_URL,这边我挑选从搜狐新闻网开始爬取。然后是界说的需要爬取的内容,年关将至,疫情防控仍旧严峻,所以我这边挑选了疫情作为KEYWORD,这边使用正则表达式。还界说了一个count用来计算爬出的数量。
2,接着经过url请求REQUEST_URL,并经过BufferedReader读取每次处理一行数据。对匹配关键字的内容进行进一步的处理。
3,经过getUrl办法找到匹配内容中的超链接信息(此处代码简化处理,默许一条,实践会出现多条,经过调集存储)。假如存在超链接信息,则递归调用spider办法持续处理。
4,假如不含有超链接信息,则直接经过getValue办法经过正则表达式匹配出相关信息内容(这边也简化处理,一行数据只取一条,实践会多条,调集进行存储)
结果展现
后序
1,有些网站会对内容进行约束,网络请求后回来的内容底子没办法去解析。
2,文中正则表达式的方法不一定是最佳的,欢迎各位大佬点评。
3,由于存在html标题设置和content实践内容都包含关键字等状况,爬出来的数据内容可能会出现重复的状况,我们能够先把匹配出来的内容用一个调集保存后再进行去重处理。
4,大约的思路其实便是这样,我们能够在此基础上拓展,当时面试的时候也有公司问过这种爬虫大约应该怎么写,也希望能协助到我们。
目前市面上流行的爬虫以python居多,简单了解之后,觉得简单的一些页面的爬虫,主要就是去解析目标页面(html)。那么就在想,java有没有用户方便解析html页面呢?找到了一个jsoup包,一个非常方便解析html的工具呢。
使用方式也非常简单,引入jar包:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
使用http工具,请求获取目标页面的整个html页面信息,然后使用jsoup解析:
//获取html页面信息
Stringhtml=getHtml();
//使用jsoup将html解析为Document对象
Documentdoc=Jsoup.parse(html);
//后续操作就可以解析这个DOM树了,非常简单。
广州天河区珠江新城富力盈力大厦北塔2706
020-38013166(网站咨询专线)
400-001-5281 (售后服务热线)
深圳市坂田十二橡树庄园F1-7栋
Site/ http://www.szciya.com
E-mail/ itciya@vip.163.com
品牌服务专线:400-001-5281
长沙市天心区芙蓉中路三段398号新时空大厦5楼
联系电话/ (+86 0731)88282200
品牌服务专线/ 400-966-8830
旗下运营网站:
Copyright © 2016 广州思洋文化传播有限公司,保留所有权利。 粤ICP备09033321号