爬虫案例----从https://www.csdn.net/网站中获得“企业博客”相关的数据
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PaChong {
public static void main(String[] args) throws Exception {
// 封装地址
URL url = new URL("https://www.csdn.net/");
// 获得连接对象,向下转型为HttpURLConnection对象
HttpURLConnection huc = (HttpURLConnection) url.openConnection();
// 打开链接
huc.connect();
// 创建装链接数据的StringBuilder对象
StringBuilder stb = new StringBuilder();
// 如果打开链接的响应状态码是200,说明请求响应成功
if (huc.getResponseCode() == 200) {
// 从连接上获得数据输入流
InputStream is = huc.getInputStream();
// 将数据输入流包装成缓冲字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 从流中读取字符数据,一次读一行,并将读到的数据放到装连接数据的StringBuilder对象stb里面去
String str = br.readLine();
while (str != null) {
stb.append(str + "\r\n");
str = br.readLine();
}
}
// 将读到的数据转换成字符串
String s = stb.toString();
// System.out.println(s);
// 获得“企业博客”的数据
String qiYeBoKe = getQiYeBoKe(s);
// System.out.println(qiYeBoKe);
System.out.println("企业博客数据读取完毕");
// 获得企业博客的log图片地址
ArrayList<String> imgUrlList = getAllImageUrl(qiYeBoKe);
for (String str : imgUrlList) {
System.out.println(str);
}
System.out.println("--------企业博客的图片地址读取完毕--------");
// 获得各企业博客的标题
ArrayList<String> titleList = getAllTitle(qiYeBoKe);
for (String str : titleList) {
System.out.println(str);
}
System.out.println("--------企业博客的标题读取完毕--------");
}
// 获得企业博客的数据的方法
public static String getQiYeBoKe(String s) {
// 正则表达式:<div class="enterprise_blog">(.*\s)+(?=<div class="fixed24">)
// 根据正则表达式创建一个字符串匹配器
Matcher m = Pattern.compile("<div class=\"enterprise_blog\">(.*\\s)+(?=<div class=\"fixed24\">)").matcher(s);
if (m.find()) {
s = m.group();
return s;
}
return null;
}
// 获得企业博客中企业的log图片地址的方法
public static ArrayList<String> getAllImageUrl(String s) {
ArrayList<String> imgUrlList = new ArrayList<>();
// 正则表达式:(?<=<img\s+src=").+?(?=" alt=")
Matcher matcher = Pattern.compile("(?<=<img\\s+src=\").+?(?=\" alt=\")").matcher(s);
while (matcher.find()) {
String imgUrl = matcher.group();
// System.out.println("地址为" + imgUrl);
imgUrlList.add(imgUrl);
}
return imgUrlList;
}
// 获得各企业博客的标题的方法
public static ArrayList<String> getAllTitle(String html) {
ArrayList<String> titleList = new ArrayList<>();
// 正则表达式为:(?<=target="_blank">).+?(?=</a>)
Pattern pattern = Pattern.compile("(?<=target=\"_blank\">).+?(?=</a>)");
Matcher matcher = pattern.matcher(html);
while (matcher.find()) {
String title = matcher.group();
titleList.add(title);
}
return titleList;
}
}
运行结果为:
企业博客数据读取完毕
https://profile.csdnimg.cn/2/D/6/1_devcloud
https://profile.csdnimg.cn/0/F/A/1_alitech2017
https://profile.csdnimg.cn/3/5/E/1_meituantech
https://profile.csdnimg.cn/C/0/8/1_sequoiadb_official
https://profile.csdnimg.cn/E/D/D/1_guduzhongliang
https://profile.csdnimg.cn/E/1/9/1_weixin_45449540
--------企业博客的图片地址读取完毕--------
华为云官方博客
阿里技术
美团技术团队
巨杉数据库技术社区
千锋教育
百度大脑
--------企业博客的标题读取完毕--------