Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。
URL是对互联网上得到的资源的位置和访问方法的一种简洁表示,是互联网上标准资源的地址。URL它具有全球唯一性,正确的URL应该是可以通过浏览器打开此网页的,但如果您访问外网,会提示网页无法打开,这并不能说明这个URL是错误的。只不过在国内不能访问而已。
URL url = new URL(net);
这行代码是在 Java 中创建一个 URL 对象,URL 是一个表示统一资源定位符的类。它通常用于表示互联网上的资源,例如网页、图片、视频等。
在上面的代码中,net 是一个字符串,表示要访问的 URL 地址。URL 类的构造函数接受一个字符串参数,用于指定要访问的 URL。也可以直接写地址。
URLConnection 是用于表示 URL 连接的抽象类,它是所有 URL 连接类的超类。URLConnection 类提供了一些方法来获取与 URL 连接相关的信息,并进行网络操作,例如打开连接、读取响应数据等。
下面是 URLConnection 类的一些常用方法:
openConnection() 方法:用于创建一个 URL 连接对象。
connect() 方法:用于打开 URL 连接并准备读取数据。
getInputStream() 方法:用于获取与 URL 连接关联的输入流,从中可以读取响应数据。
getOutputStream() 方法:用于获取与 URL 连接关联的输出流,从中可以写入请求数据。
setRequestMethod() 方法:用于设置请求方法,例如 GET、POST 等。
setRequestProperty() 方法:用于设置请求头信息。
getResponseCode() 方法:用于获取 HTTP 响应码。
getResponseMessage() 方法:用于获取 HTTP 响应消息。
这个大家自己找几篇文章了解一下。
在 Java 中,Pattern 和 Matcher 是用于进行正则表达式匹配的类。
Pattern 类表示一个正则表达式的编译结果,可以用于在输入字符串上执行匹配操作。Pattern 类提供了一些静态方法来创建 Pattern 对象,例如 compile() 方法用于编译正则表达式,matches() 方法用于检查输入字符串是否与正则表达式匹配,等等。
下面是一个简单的示例代码,演示了如何创建 Pattern 对象并进行匹配操作:
import java.util.regex.*;
public class PatternExample {
public static void main(String[] args) {
// 编译正则表达式
Pattern pattern = Pattern.compile("foo\\d+");
// 在输入字符串上执行匹配操作
String input = "foo123bar";
boolean isMatch = pattern.matcher(input).matches();
System.out.println(isMatch); // 输出 true
}
}
在上面的代码中,首先使用 Pattern.compile() 方法编译正则表达式 foo\d+,然后使用 matcher() 方法创建一个 Matcher 对象。接着,使用 matches() 方法在输入字符串 foo123bar 上执行匹配操作,并将结果存储在一个布尔型变量中。最后,将匹配结果输出到控制台。
_Matcher 类表示一个输入字符串上的匹配器,用于执行正则表达式的匹配操作。Matcher 类提供了一些方法来执行匹配操作,例如 find() 方法用于查找下一个匹配项,group() 方法用于返回与最后一次匹配相匹配的子序列,等等。
下面是一个简单的示例代码,演示了如何使用 Matcher 类进行匹配操作:
import java.util.regex.*;
public class MatcherExample {
public static void main(String[] args) {
// 编译正则表达式
Pattern pattern = Pattern.compile("foo\\d+");
// 在输入字符串上执行匹配操作
String input = "foo123barfoo456baz";
Matcher matcher = pattern.matcher(input);
// 查找匹配项并输出结果
while (matcher.find()) {
String match = matcher.group();
int start = matcher.start();
int end = matcher.end();
System.out.println("Match: " + match + ", Start: " + start + ", End: " + end);
}
}
}
在上面的代码中,首先使用 Pattern.compile() 方法编译正则表达式 foo\d+,然后使用 matcher() 方法创建一个 Matcher 对象。接着,使用 find() 方法查找输入字符串中的匹配项,并使用 group()、start() 和 end() 方法获取匹配结果的相关信息。最后,将匹配结果输出到控制台。
package com.shuaige;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class paTest {
public static void main(String[] args)throws Exception {
String familyname = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&from=kg0";
String boyname = "http://www.haoming8.cn/baobao/10881.html";
String girlname = "http://www.haoming8.cn/baobao/7641.html";
String nann = "https://poe.com/";
String name = webCrawler(familyname);
String Boyname = webCrawler(boyname);
String Girlname = webCrawler(girlname);
ArrayList<String> familyName = getData(name,"(.{4})(,|。)",1);
ArrayList<String> boyName = getData(Boyname,"([\\u4F00-\\u9FA5]{2})(、|。)",1);
ArrayList<String> girlName = getData(Girlname,"(.. ){4}..",0);
System.out.println(boyName);
//System.out.println(familyName);
}
private static ArrayList<String> getData(String str,String regex,int index){
ArrayList<String> list = new ArrayList<>();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()){
list.add(matcher.group(index));
}
return list;
}
public static String webCrawler(String net)throws Exception{
StringBuilder sb = new StringBuilder();
URL url = new URL(net);
URLConnection conn = url.openConnection();
InputStreamReader isr = new InputStreamReader(conn.getInputStream());
int ch;
while((ch=isr.read())!=-1){
sb.append((char) ch);
}
isr.close();
return sb.toString();
}
}
定义了四个字符串变量 familyname、boyname、girlname 和 nann,分别表示要爬取数据的四个网站的 URL。
调用 webCrawler 方法,从四个网站上爬取数据,并将数据存储在字符串变量 name、Boyname、Girlname 和 nann 中。
调用 getData 方法,使用正则表达式从字符串中提取数据,并将提取结果存储在 ArrayList 中。其中,第一个参数是要匹配的字符串,第二个参数是正则表达式,第三个参数是要提取的子表达式的索引。
输出 boyName 和 familyName 的内容。
在上面的代码中,webCrawler 方法使用 URL 和 URLConnection 类从指定的网站上读取数据,并将数据存储在一个 StringBuilder 中。getData 方法使用 Pattern 和 Matcher 类进行正则表达式匹配和数据提取。最后,程序输出了 boyName 和 familyName 的内容,这些内容是从指定的网站上爬取并提取出来的。
今天的分享到此结束,但是我的爬虫实现比较简单,适合入门,大家想要深入了解还是去看看jsoup-.