网络编程笔记二:一个java爬虫的实现(静态页面)
2016-09-30 22:06
741 查看
这一份博客直接贴代码了,因为:),作为平时的学习我习惯写完代码后反观一次,做比较详细的注释。
在这里BB一句,有时候我们学点东西之前总会正儿八经正襟危坐地问啊问啊“怎么入门怎么入门怎么入门呢”。个人有点小感慨:边学边做就是很好的开始,特别是有一个任务有一个目的地学习,知识就是个无向循环图,你可能会为了一个任务,不说“学到”,你也会接触到很多其它方面的知识,你以前学过的东西也都铺垫成你追求其它知识的道路。所以不要再喊着“入门”了直接上路吧!
比如说,下面我们来爬取豆瓣影评(静态页面,即还不去处理由js来承载的评论),然后我们就接触到了一点服务端与客户端交互的知识,一点有关于java流的东西,一点正则的东西 (每一个这样的括号(.*?)都对应了要提取的部分)
在这里BB一句,有时候我们学点东西之前总会正儿八经正襟危坐地问啊问啊“怎么入门怎么入门怎么入门呢”。个人有点小感慨:边学边做就是很好的开始,特别是有一个任务有一个目的地学习,知识就是个无向循环图,你可能会为了一个任务,不说“学到”,你也会接触到很多其它方面的知识,你以前学过的东西也都铺垫成你追求其它知识的道路。所以不要再喊着“入门”了直接上路吧!
比如说,下面我们来爬取豆瓣影评(静态页面,即还不去处理由js来承载的评论),然后我们就接触到了一点服务端与客户端交互的知识,一点有关于java流的东西,一点正则的东西 (每一个这样的括号(.*?)都对应了要提取的部分)
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Spider { public static String SendGet(String url, String decode){ //定义一个字符串用来存储网页内容 String result = ""; //定义一个缓冲字符输入流 BufferedReader in = null; //为什么要用buffered,因为是可追加的。为什么不用byte,因为是定长的。若未超长则可追加,若超长了则不能追加 try{ //将string 转成url对象 URL realUrl = new URL(url); //初始化一个链接到那个url的连接 URLConnection connection = realUrl.openConnection(); //开始实际的连接 connection.connect(); //初始化bufferedReader输入流来读取url的响应 in = new BufferedReader(new InputStreamReader( connection.getInputStream(), decode)); //用来临时存储抓取到的每一行数据 String line; while((line = in.readLine()) != null){ //遍历抓取到的每一行都放到result中去 result += line; } } catch (Exception e){ System.out.println("something wrong when sending GET requirement! " +e); e.printStackTrace(); } //无论成功与否,用finally来关闭输入流 finally{ try{ if(in != null){ in.close(); } } catch(Exception e2){ e2.printStackTrace(); } } return result; } public static String RegexString(String targetStr, String patternStr){ //定义一个样式模板,此中使用正则表达式,括号中是要抓的内容 Pattern pattern = Pattern.compile(patternStr); //定义一个matcher用来做匹配 Matcher matcher = pattern.matcher(targetStr); if(matcher.find()){ String res = ""; for(int i = 0; i <= matcher.groupCount(); i ++){ res = res + matcher.group(i) + " "; } return res; } return "Nothing"; } public static void GetDouBan(String content){ //ArrayList<douban> results = new ArrayList<douban>(); Pattern pattern = Pattern.compile("subject-title.*?>(.*?)<.*?allstar(.*?)0 main-title-rating.*?short-content\">(.*?)<"); //正则表达式匹配我们需要的地方 Matcher matcher = pattern.matcher(content); boolean isfind = matcher.find(); while(isfind){ //group(0)取出的是全部内容 System.out.println("name: " + matcher.group(1)); System.out.println("score: " + matcher.group(2)); System.out.println("comment: " + matcher.group(3)); isfind = matcher.find(); } } /**/ public static void main(String[] args) { String url = "https://movie.douban.com/review/best/"; String result = SendGet(url, "utf-8"); GetDouBan(result); } }
相关文章推荐
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- java网络编程实现一个聊天程序
- java网络编程(6)——实现一个服务器把小写转大写
- 一个java网络编程Socket的例子,实现Server与Client聊天
- java网络编程学习笔记(四):线程池的实现
- java实现一个简单的网络爬虫代码示例
- Java网络编程笔记--实现UDP广播发送与接收
- JAVA编写网络爬虫笔记(第二部分:httpClient下载页面)
- [java网络编程]一个简易网络服务器的实现
- dySE:一个 Java 搜索引擎的实现,第 1 部分 网络爬虫
- Java基础知识强化之网络编程笔记07:TCP之服务器给客户端一个反馈案例
- Java学习笔记之网络编程基础-通过URLConnection获取HTML页面
- Java_常瑞鹏 java_网络编程实现一个 聊天程序
- 搜索引擎----Java实现一个简单的网络爬虫
- dySE:一个 Java 搜索引擎的实现,第 1 部分: 网络爬虫
- java网络编程实现一个聊天程序
- 用java实现一个简单的网络爬虫
- Java学习笔记之网络编程基础-通过URL获取HTML页面
- 网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)
- Java实现一个简单的网络爬虫