一、前言
Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,
可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
主要功能:
1)从一个URL,文件或字符串中解析HTML
2)使用DOM或CSS选择器来查找、取出数据
3)可操作HTML元素、属性、文本
二、案例
这里以百度贴吧的一个帖子为例,爬取帖子里的邮箱,如图:
首先新建一个Maven Project
在pom.xml中加入jsoup的jar包:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.2</version>
</dependency>
Java代码:
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* 爬取贴吧邮箱
* @author Honest
*
*/
public class JsoupTest3 {
public static void main(String[] args) {
int index = 1;//页数
String url = "https://tieba.baidu.com/p/3349997454?pn=";//地址
long startTime = System.currentTimeMillis();//开始时间
int i = 0;//记录获取邮箱个数
try {
//获取10页的内容
for(;index <= 10;index++) {
Document document = Jsoup.connect(url+index)
//伪装成浏览器进行抓取
.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0")
.get();
Element main = document.getElementById("j_p_postlist");
Elements content = main.select("div.l_post_bright")
.select("div.d_post_content_main")
.select("div.p_content")
.select("cc")
.select("div.d_post_content");
//遍历每一帖的内容
for (Element element : content) {
String Content = element.text();
//正则表达式判断邮箱
String patternStr = "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(Content);
//如果含有邮箱,获取到的邮箱个数i+1,并输出该邮箱
if(matcher.find()) {
i++;
System.out.println(matcher.group());
}
}
}
long endTime = System.currentTimeMillis();//结束时间
System.out.println("获取了"+i+"个邮箱");
//System.currentTimeMillis()单位为毫秒,除以1000转化为秒
System.out.println("耗时:"+(endTime - startTime)/1000+"s");
} catch (IOException e) {
e.printStackTrace();
}
}
}
需要注意的是,在利用爬虫爬取网页数据的时候,一定要伪装成浏览器,否则有的网站在识别到你正在通过爬虫爬取数据后,会封掉你的ip,切记切记。