java 模拟登陆exe_Java简单模拟登陆和爬虫实例---博客园老牛大讲堂
鑒于有人說講的不清楚,我這里再詳細(xì)補(bǔ)充一下:更新日期:2017-11-23
本片文章適合初學(xué)者,只簡單說了一下爬蟲怎么用,和一個簡單的小實例。不適合你的就可以不看了。----博客園老牛大講堂
1、什么是爬蟲?
個人解釋:網(wǎng)路爬蟲其實就是拷貝網(wǎng)頁源代碼。
例如:我寫了個網(wǎng)站:http://www.qe14053716.icoc.me/,你想獲取里面的數(shù)據(jù)咋辦?java的話肯定是把網(wǎng)站的源代碼全部拿過來,把想要的數(shù)據(jù)給分析出來就完事了!
百度爬蟲:百度是個搜索引擎,它的工作是什么呢?其實就是不斷的把你的源代碼拿過去,之后你的數(shù)據(jù)就泄漏了。
例如:我的博客園老牛大講堂,這篇文章百度會每隔一段時間爬取一下,這樣大家就能通過百度搜索到我的文章了。
例如:現(xiàn)在出了不僅僅是博客園,還有其他的:新浪,博客等,還有一下不知名的博客園之類的,因為他們沒有用戶,沒有人發(fā)文章咋辦?
所以就爬取別人的網(wǎng)站,來發(fā)表到自己的內(nèi)容上。
防爬蟲:怎么防止爬蟲,像這種公開的博客園,無法防止爬蟲,因為博客園需要爬蟲來做推廣!所以我加了防偽標(biāo)志-----博客園老牛大講堂,
不管這篇文章被爬蟲了多少遍,我的博客園老牛大講堂永遠(yuǎn)都會在,你們可以查看我的原文章了!
常見的爬蟲技術(shù):
現(xiàn)在網(wǎng)路上出了很多爬蟲技術(shù):八爪魚、神箭手,這些都做的比較成熟了,好像是免費的。可以使用(我沒用過,不介紹了)
我介紹的是爬蟲常見的技術(shù)之一:jsoup爬蟲
2、jsoup爬蟲優(yōu)缺點?---博客園老牛大講堂
缺點:1,抓網(wǎng)頁有點慢,2、抓靜態(tài)網(wǎng)頁比較好。如果里面涉及到一些動態(tài)的網(wǎng)頁,可能抓不出來。
缺點太多了,現(xiàn)在主流一般不用jsoup,因為現(xiàn)在動態(tài)網(wǎng)頁居多,jsoup爬取動態(tài)網(wǎng)頁效果太差。所以不用
如果使用,也一般jsoup技術(shù)和其他技術(shù)一塊來用,方便爬取網(wǎng)頁。
3、怎么爬蟲?---博客園老牛大講堂
例子:這里用了jsoup爬蟲。這里的用戶名,密碼因為涉及到其他的,所以你懂的。
這里的例子需要一個jar包:jsoup-1.8.1? 自己下。里面用的是jsoup爬蟲
1)爬取網(wǎng)頁----博客園老牛大講堂
不需要登陸就能獲取的網(wǎng)頁數(shù)據(jù)。
public classA {//返會一個網(wǎng)頁的所有代碼
public String getjsoup() {//返回一個網(wǎng)頁的所有代碼,get獲取內(nèi)容的方式。
Document doc = Jsoup .connect("http://www.baidu.com") .timeout(1000).get();
returndoc.text();
}
public static void main(string[] args){
System.out.println(getjsoup());
}
}
2)模擬登陸----博客園老牛大講堂
需要登陸的網(wǎng)頁,獲取后面的內(nèi)容
模擬登陸比較常見,例如:有用戶名和密碼想登陸爬取咋辦?
首先獲取網(wǎng)頁的cook是多少才行。
public classA {//返會一個網(wǎng)頁的所有代碼
public String getjsoup() {//返回一個網(wǎng)頁的所有代碼,get獲取內(nèi)容的方式。
//得到session ,進(jìn)行模擬登陸,(如果有驗證碼,我就不知道了)。--博客園老牛大講堂
Connection.Response res 得到=Jsoup.connect(
"http://*******************").data(
"userName", "2012000111033", "password", "123456789")//進(jìn)行模擬登陸
.method(Connection.Method.POST).timeout(10000).execute();//設(shè)置請求時間和登陸用的用戶名,密碼。
Document doc =res.parse();
//根據(jù)session進(jìn)行爬蟲--博客園老牛大講堂
//注釋:不是所有網(wǎng)站他們都需要cook,也不是所有的網(wǎng)站cook都是iPlanetDirectoryPro。每個網(wǎng)站cook都不一樣。
//想要知道網(wǎng)站的cook,自己百度吧!--太基礎(chǔ),不介紹了
String sessionId = res.cookie("AAA");//不同網(wǎng)站網(wǎng)址的cookie不一樣。而且每次訪問都不一樣,所以不要想著把session保存起來。
String se = res.cookie("BBB");//cook怎么查看呢?看下面
System.out.println(sessionId);System.out.println(se);
Document objectDoc =Jsoup.connect(
"http://www.****.com").cookie(//里面的網(wǎng)址(就是你想要爬取的網(wǎng)頁)
"AAA", sessionId).cookie("BBB", se)
.timeout(10000).post();//設(shè)置請求的時間(這里設(shè)置的請求時間是10秒)
return objectDoc .text();
}
public static void main(string[] args){
System.out.println(getjsoup());
}
}
cook的查看:F12-》application——》cookies查看。----博客園老牛大講堂
3)假設(shè)你已經(jīng)在控制臺輸出了自己想要的網(wǎng)頁,那么下面就看具體網(wǎng)頁的分析了
屬性太多,根據(jù)不同的網(wǎng)站,獲取方式也多種多樣,之后就能得到想要的數(shù)據(jù)了
例如:
Element htmlElement = objectDoc.getElementsByClass("table_kc").get(0);//得到class為table_kc的第一個對象
Elements trElements = htmlElement.getElementsByTag("tr");//得到tr標(biāo)簽的所有對象Elements divElments = trElements.get(i) .getElementsByAttributeValue("align", "left");//得到第i個標(biāo)簽的style為:align:left的元素,根據(jù)class進(jìn)行得到對象。
4)我獲取的一個網(wǎng)頁數(shù)據(jù)(一個網(wǎng)頁下表格里面的數(shù)據(jù))----博客園老牛大講堂
網(wǎng)頁數(shù)據(jù)不同,獲取方式也不同。
public classA {//返會一個list對象
public ListgetPersonInfo() {//返回一個list對象
List list = new ArrayList();try{
//得到session ,進(jìn)行模擬登陸,(如果有驗證碼,我就不知道了)。--博客園老牛大講堂
Connection.Response res 得到=Jsoup.connect("http://**********").data("userName", "2012000111033", "password", "123456789")//進(jìn)行模擬登陸
.method(Connection.Method.POST).timeout(10000).execute();//設(shè)置請求時間和登陸用的用戶名,密碼。
Document doc=res.parse();//根據(jù)session進(jìn)行爬蟲--博客園老牛大講堂
//注釋:不是所有網(wǎng)站他們都需要cook,也不是所有的網(wǎng)站cook都是iPlanetDirectoryPro。每個網(wǎng)站cook都不一樣。
//想要知道網(wǎng)站的cook,自己百度吧!--太基礎(chǔ),不介紹了
String sessionId = res.cookie("AAA");//不同網(wǎng)站網(wǎng)址的cookie不一樣。而且每次訪問都不一樣,所以不要想著把session保存起來。
String se= res.cookie("BBB");
Document objectDoc=Jsoup.connect("http://www.****.com").cookie(//里面的網(wǎng)址(就是你想要爬取的網(wǎng)頁)"AAA", sessionId).cookie("BBB", se)
.timeout(10000).post();//設(shè)置請求的時間(這里設(shè)置的請求時間是10秒)
Element htmlElement= objectDoc.getElementsByClass("table_kc").get(0);//得到class為table_kc的第一個對象
Elements trElements= htmlElement.getElementsByTag("tr");//得到tr標(biāo)簽的對象
System.out.println(trElements.size());//輸出多少個tr標(biāo)簽for (int i = 1; i < trElements.size(); i++) {
Elements divElments=trElements.get(i)
.getElementsByAttributeValue("align", "left");//根據(jù)class進(jìn)行得到對象。for (int j = 0; j < trElements.size(); j++) {
Element d=divElments.get(j);//獲取每一個對象
list.add(d.text());//得到這個對象對應(yīng)的值
}
}
}catch(IOException e) {
e.printStackTrace();
}returnlist;
}
}
總結(jié)
以上是生活随笔為你收集整理的java 模拟登陆exe_Java简单模拟登陆和爬虫实例---博客园老牛大讲堂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos运行java图形化界面_Ce
- 下一篇: java编码ppt_[2018年最新整理