用java写爬虫还是python写_如何用Java写一个爬虫?

直接看爬虫框架有时会很吃力,建议从简单的程序一步步入手,看到脚本之家有一个系列讲述的一个Java爬虫程序的设计,在此拿过来大家共同学习。

首先以百度首页为例通过http get的方式获取百度首页的内容

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

public class Main

{

public static void main(String[] args)

{

// 定义即将访问的链接

String url = "http://www.baidu.com";

// 定义一个字符串用来存储网页内容

String result = "";

// 定义一个缓冲字符输入流

BufferedReader in = null;

try

{

// 将string转成url对象

URL realUrl = new URL(url);

// 初始化一个链接到那个url的连接

URLConnection connection = realUrl.openConnection();

// 开始实际的连接

connection.connect();

// 初始化 BufferedReader输入流来读取URL的响应

in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

// 用来临时存储抓取到的每一行的数据

String line;

while ((line = in.readLine()) != null)

{

// 遍历抓取到的每一行并将其存储到result里面

result += line + "\n";

}

} catch (Exception e)

{

System.out.println("发送GET请求出现异常!" + e);

e.printStackTrace();

} // 使用finally来关闭输入流

finally

{

try

{

if (in != null)

{

in.close();

}

} catch (Exception e2)

{

e2.printStackTrace();

}

}

System.out.println(result);

}

}

没错,就是这一坨翔一样的东西。这就是百度页面的源代码。

临时需求:

获取百度Logo的大熊爪子的图片链接。

一.封装get方法

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.net.URLConnection;

public class Main

{

static String sendGet(String url)

{ // 定义一个字符串用来存储网页内容

String result = "";

// 定义一个缓冲字符输入流

BufferedReader in = null;

try

{

// 将string转成url对象

URL realUrl = new URL(url);

// 初始化一个链接到那个url的连接

URLConnection connection = realUrl.openConnection();

// 开始实际的连接

connection.connect();

// 初始化 BufferedReader输入流来读取URL的响应

in = new BufferedReader(new InputStreamReader(connection.getInputStream()));

// 用来临时存储抓取到的每一行的数据

String line;

while ((line = in.readLine()) != null)

{

// 遍历抓取到的每一行并将其存储到result里面

result += line;

}

} catch (Exception e)

{

System.out.println("发送GET请求出现异常!" + e);

e.printStackTrace();

} // 使用finally来关闭输入流

finally

{

try

{

if (in != null)

{

in.close();

}

} catch (Exception e2)

{

e2.printStackTrace();

}

}

return result;

}

public static void main(String[] args)

{

// 定义即将访问的链接

String url = "http://www.baidu.com";

// 访问链接并获取页面内容

String result = sendGet(url);

System.out.println(result);

}

}

这样看起来稍微整洁了一点,请原谅我这个强迫症。

接下来的任务,就是从获取到的一大堆东西里面找到那个图片的链接。

我们首先可以想到的方法,是对页面源码的字符串result使用indexof函数进行String的子串搜索。

没错这个方法是可以慢慢解决这个问题,比如直接indexOf("src")找到开始的序号,然后再稀里哗啦的搞到结束的序号。

不过我们不能一直使用这种方法,毕竟草鞋只适合出门走走,后期还是需要切假腿来拿人头的。

请原谅我的乱入,继续。

那么我们用什么方式来寻找这张图片的src呢?

没错,正如下面观众所说,正则匹配。

如果有同学不太清楚正则,可以参照这篇文章:[Python]网络爬虫(七):Python中的正则表达式教程。

简单来说,正则就像是匹配。

比如三个胖子站在这里,分别穿着红衣服,蓝衣服,绿衣服。

正则就是:抓住那个穿绿衣服的!

然后把绿胖子单独抓了出来。

就是这么简单。

但是正则的语法却还是博大精深的,刚接触的时候难免有点摸不着头脑,

向大家推荐一个正则的在线测试工具:正则表达式在线测试。

有了正则这个神兵利器,那么怎么在java里面使用正则呢?

先来看个简单的小李子吧。

啊错了,小栗子。

// 定义一个样式模板,此中使用正则表达式,括号中是要抓的内容 // 相当于埋好了陷阱匹配的地方就会掉下去

Pattern pattern = Pattern.compile("href=\"(.+?)\"");

// 定义一个matcher用来做匹配

Matcher matcher = pattern.matcher("<a href=\"index.html\">我的主页</a>");

// 如果找到了 if (matcher.find()) {

// 打印出结果

System.out.println(matcher.group(1));

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值