一个简单的爬虫(1)

在学习了简单的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("&middot;");
//用来匹配演员英文名称中的姓氏与名字之间的点,由于名字中间的点在html源码中是使用转义的字符的,所以得到的字符串也是&middot;所以我们仍需要对它进行替换回去
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("&middot;");
        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);
        }
    }
}

!!初次尝试,错误之处望指正!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值