JAVA简单的爬虫代码
2016-02-04 15:09
441 查看
在写文章之前,我想先申明一下。我是一个刚刚开始学习JAVA的新手,所有我写的文章可能会很基础,而且还可能会出现一些低级错误,如果各位前辈发现任何错误,欢迎留言指出,小弟在此感激不尽。首先,我和大家说一下我的思路。我是用的最简单的方法实现从网页上提取有用的信息的。①写一个类读取网页的HTML代码的全部内容②然后用对应的正则表达式获取你需要的对应的内容③最后写了一个类把获取的所有有用的信息写到txt文本里下面我就附上我写的代码,希望那些和我一样的新手能从中学习到一些有用的知识,前辈么就帮我看看纠纠错和指出哪些地方可以改进的。第一步:写一个类读取网页的HTML代码的全部内容<pre name="code" class="java">package com.acxiom;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.MalformedURLException;import java.net.URL;public class GetOneHtml {public static String getOneHtml(final String htmlurl) throws IOException {URL url;String temp;final StringBuffer sb = new StringBuffer();try {url = new URL(htmlurl);final BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "utf-8"));// 读取网页全部内容while ((temp = in.readLine()) != null) {sb.append(temp);}in.close();} catch (final MalformedURLException me) {System.out.println("你输入的URL格式有问题!");me.getMessage();throw me;} catch (final IOException e) {e.printStackTrace();throw e;}return sb.toString();}}第二步:用对应的正则表达式获取你需要的对应的内容
<span style="white-space:pre"> </span>这里我写的这个程序需要从网页上提取9个有用的字段,我这里就不全部给大家展示了,因为用到的思想是一模一样的,我就放两个类在上面给大家参考一下,你们需要使用的时候,可以根据自己的需求修改下正则表达式和一些相应的代码就可以了。
<span style="white-space:pre"> </span>1:获取停车位信息的代码
<pre name="code" class="java">package com.acxiom; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.acxiom.GetOneHtml; public class GetCarport { public String getCarport(final String s) { String regex; final List<String> list = new ArrayList<String>(); String html = ""; String title = ""; try { html = GetOneHtml.getOneHtml(s); } catch (final Exception e) {as e.getMessage(); } regex = "停 车 位</td><td>\\S*</td>"; final Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ); final Matcher ma = pa.matcher(html); while (ma.find()) { list.add(ma.group()); } for (int i = 0; i < list.size(); i++) { title = title + list.get(i); } return outTag(title); } public String outTag(final String s) { return s.replaceAll("停 车 位</td><td>", "").replaceAll("</td>", ""); } }
<pre name="code" class="java"><span> </span>2:获取房价信息的代码
<pre name="code" class="java">package com.acxiom;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class HousePrice {public String housePrice(final String s) {String regex;final List<String> list = new ArrayList<String>();String html = "";String title = "";try {html = GetOneHtml.getOneHtml(s);} catch (final Exception e) {e.getMessage();}regex = "本周均价:<.*>\\d+</span>元/㎡";final Pattern pa = Pattern.compile(regex, Pattern.CANON_EQ);final Matcher ma = pa.matcher(html);while (ma.find()) {list.add(ma.group());}for (int i = 0; i < list.size(); i++) {title = title + list.get(i);}return outTag(title);}public String outTag(final String s) {return s.replaceAll("</span>", "").replaceAll("本周均价:<.*>", "");}}
<span> </span>第三步:写一个类把获取的所有有用的信息写到txt文本文件里
<span style="white-space:pre"> </span>这个代码里面最下面导出的数据是我需要的所有字段,还有一些代码是对一些提取的信息的一些特殊处理,你们可以根据自己的具体需求做相应的修改就可以了。
package com.acxiom;import java.io.BufferedReader;import java.io.FileWriter;import java.io.IOException;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;public class ExportData {public static void main(final String args[]) throws IOException {String url = "";final List<String> list = new ArrayList<String>();System.out.print("输入URL,一行一个,输入结束后输入 go 程序开始运行: \n");final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));try {while (!(url = br.readLine()).equals("go")) {list.add(url);}} catch (final Exception e) {e.getMessage();}RealmName rn = new RealmName();GetCarport gc = new GetCarport();GetHouseTime gh = new GetHouseTime();HousePrice hp = new HousePrice();GreenSpace gs = new GreenSpace();VolumeRatio vr = new VolumeRatio();PropertyFee pf = new PropertyFee();XiaoquName xn = new XiaoquName();XiaoquAddress xa = new XiaoquAddress();FileWriter fw = new FileWriter("温州小区信息概况.txt");for (int i = 0; i < list.size(); i++) {String carportNum = "" ;String realmName = "";if (gc.getCarport(list.get(i)).equals("暂无资料")) {carportNum = "";} else {String str = gc.getCarport(list.get(i));Pattern p = Pattern.compile("\\d+");Matcher m = p.matcher(str);while(m.find()){carportNum = m.group();}}if(rn.getRealmName(list.get(i)).contains("-")){String str = rn.getRealmName(list.get(i));Pattern p = Pattern.compile("-[\u4e00-\u9fa5]+");Matcher m = p.matcher(str);while(m.find()){realmName = m.replaceAll("");}}else{realmName = rn.getRealmName(list.get(i));}fw.write("温州市" + "|" + realmName + "|"+ xn.getXiaoquName(list.get(i))+ "|" + xa.getXiaoquAddress(list.get(i)) + "|" + gc.getCarport(list.get(i))+ "|" + carportNum + "|" + gh.getHouseTime(list.get(i)) + "|"+ hp.housePrice(list.get(i)) + "|" + gs.greenSpace(list.get(i)) + "|"+ vr.volumeRatio(list.get(i)) + "|" + pf.propertyFee(list.get(i)) + "\n");System.out.println("温州市" + "|" + realmName + "|"+ xn.getXiaoquName(list.get(i))+ "|" + xa.getXiaoquAddress(list.get(i)) + "|" + gc.getCarport(list.get(i))+ "|" + carportNum + "|" + gh.getHouseTime(list.get(i)) + "|"+ hp.housePrice(list.get(i)) + "|" + gs.greenSpace(list.get(i)) + "|"+ vr.volumeRatio(list.get(i)) + "|" + pf.propertyFee(list.get(i)));}fw.close();}}在这里我在说一个事,我跑这个程序所用到的URL在这之前我用类似的方法把网站上所有我需要的链接给爬出来了,然后把所有的URL放到这个代码里面跑就能得到我需要的结果了,因为我爬URL的代码不太好还有待优化,所以就没有放上来,之后等我做进一步的学习之后,把代码做进一步的优化之后在来和大家分享。
<span style="font-family: Arial, Helv4000etica, sans-serif;">好了,我这次的分享就到此结束了,希望能对和我一样的新手有些帮助,同时也欢迎各路大神给我提出宝贵的意见,谢谢大家。</span><span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<span style="white-space:pre"> </span>
相关文章推荐
- Eclipse集成反编译插件jd-Eclipse
- JAVA反序列化漏洞
- Java并发之(3):锁
- Java Criteria表关联查询(两个表未定义关联关系)
- Java实现UDP之Echo客户端和服务端
- 举例说明Java多线程编程中读写锁的使用
- Java基础:修饰符
- Java经典用法总结(二)
- Java实现Socket之WhoisClient
- java注解处理器
- Struts2架构解析
- selenium java 程序 无法打开火狐及相关问题
- JDK里的设计模式
- Java学习笔记--split篇
- Java实现Socket之TimeClient
- Java基础:JDK安装及Java环境变量配置
- java国际化——日期和时间+排序
- Java 数组
- eclipse 项目导出到android studio使用
- Java学习笔记---SQLYog快捷键