java爬虫抓取网页数据(网络爬虫(又被称为网页蜘蛛,网络机器人() )
优采云 发布时间: 2022-03-26 00:18java爬虫抓取网页数据(网络爬虫(又被称为网页蜘蛛,网络机器人()
)
网络爬虫
网络爬虫(也称为网络蜘蛛、网络机器人,在 FOAF 社区中更常称为网络追逐者)是根据一定规则自动从万维网上爬取信息的程序或脚本。
其他不太常用的名称是 ant、autoindex、emulator 或 worm。网络蜘蛛通过网页的链接地址搜索网页,从网站的某个页面(通常是首页)开始,阅读
网页的内容,找到网页中的其他链接地址,然后通过这些链接地址寻找下一个网页,如此循环下去,直到这个网站的所有网页都被爬取完毕。如果整个
互联网被视为一个网站,那么网络蜘蛛就可以利用这个原理爬取互联网上的所有网页。因此,为了抓取网络上的数据,不仅需要爬虫,还需要
由“爬虫”发回的数据进行处理和过滤的服务器,爬虫爬取的数据量越大,对服务器的性能要求就越高。
1 重点介绍爬虫的工作原理及关键技术概述
网络爬虫是一种自动提取网页的程序。它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成部分。传统爬虫从一个或多个初始网页的URL开始,获取初始网页的信息。
在抓取网页的过程中,不断地从当前页面中提取新的 URL 并放入队列中,直到满足系统的某些停止条件。焦点爬虫的工作流程比较复杂,需要根据某个网页进行分析
算法过滤掉主题链接,保留有用的链接并将它们放入等待抓取的 URL 队列中。然后,它会根据一定的搜索策略从队列中选择下一个要爬取的网页URL,重复上述操作
停止上述过程,直到达到系统的某个条件。此外,所有被爬虫爬取的网页都会被系统存储,经过一定的分析、过滤、索引,以供后续查询和检索;
对于焦爬虫来说,这个过程中得到的分析结果也可能对后续的爬取过程起到反馈和指导作用。
与通用网络爬虫相比,聚焦爬虫还需要解决三个主要问题:
(1) 获取目标的描述或定义;
(2) 网页或数据的分析和过滤;
(3) URL 的搜索策略。
分类
根据系统结构和实现技术,网络爬虫大致可以分为以下几种:通用网络爬虫、重点网络爬虫、
增量网络爬虫,深度网络爬虫。实际的网络爬虫系统通常是通过结合几种爬虫技术来实现的。
网络爬虫实现原理
根据这个原理,编写一个简单的网络爬虫程序,这个程序的作用是获取网站发回的数据,并提取其中的URL。我们将获取的 URL 存储在一个文件夹中。刚从网上
网站获取的URL进一步循环获取数据,提取其他数据。这里就不写了,只是模拟一个最简单的原理。实际的网站爬虫远比这个复杂,深入的讨论太多了。
. 除了提取URL之外,我们还可以提取我们想要的各种其他信息,只要我们修改过滤数据的表达式即可。下面是一个Java模拟的提取新浪网页链接并存储的程序
在一个文件中
源代码如下
package com.cellstrain.icell.util;
import java.io.*;
import java.net.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* java实现爬虫
*/
public class Robot {
public static void main(String[] args) {
URL url = null;
URLConnection urlconn = null;
BufferedReader br = null;
PrintWriter pw = null;
// String regex = "http://[\\w+\\.?/?]+\\.[A-Za-z]+";
String regex = "https://[\\w+\\.?/?]+\\.[A-Za-z]+";//url匹配规则
Pattern p = Pattern.compile(regex);
try {
url = new URL("https://www.rndsystems.com/cn");//爬取的网址、这里爬取的是一个生物网站
urlconn = url.openConnection();
pw = new PrintWriter(new FileWriter("D:/SiteURL.txt"), true);//将爬取到的链接放到D盘的SiteURL文件中
br = new BufferedReader(new InputStreamReader(
urlconn.getInputStream()));
String buf = null;
while ((buf = br.readLine()) != null) {
Matcher buf_m = p.matcher(buf);
while (buf_m.find()) {
pw.println(buf_m.group());
}
}
System.out.println("爬取成功^_^");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
pw.close();
}
}
}
运行idea的结果如下:
检查D盘是否有SiteURL.txt文件
已经成功生成SiteURL文件,打开就可以看到所有抓到的url