本項目中需要用到兩個第三方j(luò)ar包酌毡,分別為 jsoup 和 commons-io。
jsoup的作用是為了解析網(wǎng)頁霜医, commons-io 是為了把數(shù)據(jù)保存到本地光稼。
1.爬取貼吧
第一步或南,打開eclipse孩等,新建一個java項目,名字就叫做 pachong:
然后采够,新建一個類肄方,作為我們程序的入口。
這個作為入口類吁恍,里面就寫一個main方法即可扒秸。
public class StartUp {
public static void main(String[] args) {
}
}
第二步,導(dǎo)入我們的依賴冀瓦,兩個jar包:
右鍵jar包,Build path , add to Build path
接著写烤,我們試著搜索一下動漫吧的數(shù)據(jù):
https://tieba.baidu.com/f?kw=%B6%AF%C2%FE&tpl=5
public class StartUp {
public static void main(String[] args) {
String url = "https://tieba.baidu.com/f?kw=%B6%AF%C2%FE&tpl=5";
Connection connect = Jsoup.connect(url);
System.out.println(connect);
}
}
如果能夠成功打印出來鏈接翼闽,說明我們的連接測試是成功的!
然后洲炊,我們調(diào)用connect的get方法感局,獲取鏈接到的數(shù)據(jù):
Document document = connect.get();
這邊需要拋出一個異常,而且是強制性的暂衡,因為有可能會獲取失敗询微。這邊我們直接拋出去,不去捕獲狂巢。
public class StartUp {
public static void main(String[] args) throws IOException {
String url = "https://tieba.baidu.com/f?kw=%B6%AF%C2%FE&tpl=5";
Connection connect = Jsoup.connect(url);
System.out.println(connect);
Document document = connect.get();
System.out.println(document);
}
}
打印出來的結(jié)果:
可見撑毛,document對象裝的就是一個完整HTML頁面。
在這里唧领,我們想要拿到的第一個數(shù)據(jù)藻雌,就是所有帖子的標(biāo)題:
我們發(fā)現(xiàn),每一個標(biāo)題都是一個a連接斩个,class為j_th_tit 胯杭。
下一步我們就考慮獲取所有class為 j_th_tit 的元素。
我們發(fā)現(xiàn)受啥,document對象給我們提供了 getElementsByClass 的方法做个,顧名思義,就是獲取class為 XXX 的元素滚局。
Elements titles = document.getElementsByClass("j_th_tit");
接著居暖,遍歷titles,打印出每一個標(biāo)題的名稱:
for (int i = 0; i < titles.size(); i++) {
System.out.println(titles.get(i).attr("title"));
}
當(dāng)前代碼:
import java.io.IOException;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class StartUp {
public static void main(String[] args) throws IOException {
String url = "https://tieba.baidu.com/f?kw=%B6%AF%C2%FE&tpl=5";
Connection connect = Jsoup.connect(url);
Document document = connect.get();
Elements titles = document.getElementsByClass("j_th_tit");
for (int i = 0; i < titles.size(); i++) {
System.out.println(titles.get(i).attr("title"));
}
}
}