Jsoup簡單例子——爬取網頁內的郵箱
阿新 • • 發佈:2018-11-10
一、前言
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[.-]]
[email protected][\\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,切記切記。