Spring Boot 爬虫从入门到精通
- 导入HttpClient需要的jar包
- 导入Jsoup需要的jar包
- 一、HttpClient 入门
- 二、正则表达式实例
- 三、Jsoup:Java的HTML解析器
- Gitee源码下载
导入HttpClient需要的jar包
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.12</version>
</dependency>
导入Jsoup需要的jar包
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.13.1</version>
</dependency>
一、HttpClient 入门
常用的39个用户代理:点我查看
public void doGetTestOne() throws IOException{
// 获得Http客户端
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
// 创建Get请求
HttpGet httpGet = new HttpGet("http://www.grfy.net/index.htm");
// 设置请求头:User-Agent用户代理(不设置个别网站访问不了)
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:50.0) Gecko/20100101 Firefox/50.0");
// 响应模型
CloseableHttpResponse response = null;
try {
// 由客户端执行(发送)Get请求
response = httpClient.execute(httpGet);
// 从响应模型中获取响应实体
HttpEntity responseEntity = response.getEntity();
if (responseEntity != null) {
//获取网页源代码
String first_page = EntityUtils.toString(responseEntity, "utf-8");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 释放资源
if (httpClient != null) {
httpClient.close();
}
if (response != null) {
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
二、正则表达式实例
//创建一个存放目的数据的集合
List<String> list = new ArrayList<String>();
//编写正则表达式
String regex = "<a href=\"(http://.*?net)\">";
//Pattern与Matcher一起合作.
//Matcher类提供了对正则表达式的分组支持,以及对正则表达式的多次匹配支持
Pattern pattern = Pattern.compile("正则表达式");
Matcher matcher = pattern.matcher("网页源码");
//将Matcher对象中的数据存储到list中
while (matcher.find()) {
list.add(matcher.group(1));
}
//遍历输出list数组
for (String str : list) {
if (str.length() < 30) {
System.out.println("二级网页:" + str);
}
}
三、Jsoup:Java的HTML解析器
//将网页源代码转化为Document对象
Document doc = Jsoup.parse(mubiao_page);
//查询当前标签第一个选中的第一个文本内容
String title = doc.getElementsByTag("h1").first().text();
//查询当前选中元素上一个元素
//Elements elements = doc.getElementsByTag("dd").prevAll();
//查询当前选中元素下一个元素
Elements elements = doc.getElementsByTag("dt").nextAll();
//获取迭代器
Iterator it = elements.iterator();
int i = 1;
//创建Home对象
Home home = new Home();
home.setTitle(title);
//对获取的数据进行迭代遍历,存储到Home中
while (it.hasNext()) {
Element element = (Element) it.next();
String text = element.text();
if (i == 1) {
home.setPrice(text);
} else if (i == 2) {
home.setArea(text);
} else if (i == 3) {
home.setName(text);
} else if (i == 4) {
home.setAdress(text);
} else if (i == 5) {
home.setMsg(text);
} else if (i == 6) {
home.setHight(text);
} else if (i == 7) {
home.setPeople(text);
} else if (i == 8) {
home.setPhone(text);
}
i = i + 1;
}
Gitee源码下载
点我下载:https://gitee.com/pipizi/Pc_home/tree/master/