一个简单的爬虫(1)
来源:互联网 发布:婚纱照相册排版软件 编辑:程序博客网 时间:2024/05/21 10:54
在学习了简单的java语法之后,练习使用java做一个简单的爬虫,将一个电影网页的电影介绍爬下来,首先需要了解爬虫是什么!
网络爬虫(简称爬虫,又名网页蜘蛛、网络机器人),是一种按照按照一定的规则,自动地抓取万维网信息的程序或者脚本。
在了解了网络爬虫的概念之后,我们需要知道如何去爬,首先我们需要获取到这些信息,如同我们访问网页请求链接返回我们需要的数据一样,我们需要首先获取到网页的信息,这里我们使用的是jsoup中从一个URL加载一个Document,这里的可以参考jsoup使用手册,事实上我们这里通过jsoup获取到的就是整个网页的源码,同时jsoup有许多处理此源码的方法,在这篇中用的是正则匹配来进行爬虫操作。
首先使用Document 的toString方法将Document文档全部转化为字符串,然后使用字符串进行相应的片段匹配。这里要用到了以下的匹配规则:
Pattern reg_htm = Pattern.compile("<[^>]+>"); //用来匹配html标签,当我们匹配到一段主要信息之后,该短信息往往是包含一些html标签的,我们需要将这些html标签替换为空(即删除这些html标签) Pattern reg_name_ = Pattern.compile("·");//用来匹配演员英文名称中的姓氏与名字之间的点,由于名字中间的点在html源码中是使用转义的字符的,所以得到的字符串也是·;所以我们仍需要对它进行替换回去Pattern p = Pattern.compile("<span property=\"v:itemre.*</span>");//该项目的匹配是采用html标签以及标签内的内容组合的方式进行匹配,匹配的内容是电影的名字,往往每一个字段对会有特殊的class或id以及一些特殊的属性,所以可以根据这些属性进行匹配。
上面是要进行匹配的一些正则及其用处,是一些要进行匹配的规则,接下来我们要对匹配的字符串进行处理,第一个处理就是摘取出匹配的部分,使用Pattern.match(String)进行匹配的查找,得到所有能够匹配的位置(实质上该方法返回值为Boolean类型,表明匹配成功或者匹配失败),然后使用.find()方法判断是否存在匹配的结果,然后依次取该结果,输出,当需要进行替换或者html代码需要进行删除时分别再次使用不同的正则进行匹配替换,最后输出结果,同时,还可利用Java I/O操作,将要输出的内容存成文件,方便下次查看。
下面是一个简单的豆瓣电影介绍的爬虫示例:
package Jsoup;import org.jsoup.*;import org.jsoup.nodes.*;import javax.sound.midi.SysexMessage;import java.io.IOException;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * Created by zhuxinquan on 15-12-15. */public class Test { public static void main(String[] args) throws IOException { Document doc = Jsoup.connect("http://movie.douban.com/subject/25809384/?from=showing").timeout(5000).get(); String html = doc.toString(); String s = ""; Pattern reg_htm = Pattern.compile("<[^>]+>"); Pattern reg_name_ = Pattern.compile("·"); Pattern p = Pattern.compile("<span property=\"v:itemre.*</span>"); Matcher m = p.matcher(html); while(m.find()){ s = m.group(0); } m = reg_htm.matcher(s); s = m.replaceAll(""); System.out.println(s); p = Pattern.compile("(?s)<span class=\"pl\">.*?</span></span>.*?<br />"); m = p.matcher(html); while (m.find()) { s = m.group(0); Matcher m1 = reg_htm.matcher(s); s = m1.replaceAll(""); m1 = reg_name_.matcher(s); s = m1.replaceAll("·"); System.out.println(s); } //System.out.println(html); p = Pattern.compile("(?s)(<span class=\"pl\">.*?<span property=\"v:genre\">.*?</span>\n" + " <br />)"); m = p.matcher(html); while (m.find()) { s = m.group(0); Matcher m1 = reg_htm.matcher(s); s = m1.replaceAll(""); m1 = reg_name_.matcher(s); s = m1.replaceAll("·"); System.out.println(s); } }}
!!初次尝试,错误之处望指正!!
0 0
- 一个简单的爬虫(1)
- 一个简单的爬虫
- 一个简单的爬虫
- 一个简单的爬虫
- 一个简单的爬虫程序
- 一个简单的Python爬虫
- 一个简单的爬虫实验
- 一个简单的python3爬虫
- 一个简单的爬虫框架
- 一个简单的爬虫开发
- 一个简单的网页爬虫
- 一个简单的scrapy爬虫
- 一个简单的爬虫程序
- [python脚本]一个简单的web爬虫(1)
- 一个简单的爬虫的实现
- PHP实现的一个简单的爬虫
- python爬虫系列(1)——一个简单的爬虫实例
- 基于Python的一个简单爬虫(糗事百科爬虫)
- 迷茫的旅行商——一个无处不在的计算机算法问题
- ARM4开发板的EMWIN设计
- 虚拟机安装Ubuntu黑屏解决方法(分区问题)
- 生成N个二进制位的组合
- 最短排序子数组
- 一个简单的爬虫(1)
- Android Material Design学习之RecyclerView代替 ListView
- JNI & NDK 实例讲解二 (通过NDK创建JNI项目)
- IOS学习笔记之网格视图
- Ionic基础——CSS布局
- ALAsset 的用法(时间、url 、图片的获取)
- tableview的调用方法
- iOS7崩溃报 UIView _didChangeToFirstResponder
- HDU 5605 geometry