Jsoup和Senium爬蟲對比


        Jsoup真的是太好用了 感動的要哭了

        先把jar包下載鏈接留下點擊打開鏈接

        個人覺得使用Jsoup的前提是對JQuery有一定的了解

        登陸需要先自行分析需要的賬號密碼及格式 比如是user username user_name

        然后

Connection.Response res = Jsoup.connect(網址)
				.data("user_name"(參數名1), (實際參數值1), "pass_word"(參數名2), (實際參數值2),……(如果還有其他參數))
				.ignoreContentType(true)
				.method(Method.POST)
				.execute();

        通過這個獲取到cookie

Map<String, String> cookies = res.cookies();

        然后再訪問網站的時候只要帶着cookie就可以不用登陸了

//--------------------------------------------------這是一行分隔符-------------------------------------------------------     

        再次檢查代碼的時候 發現自己寫復雜了 還需要自己去核實cookies里面的參數叫什么 多麻煩 完全可以用

Document doc = Jsoup.connect(網址)
		    .cookies(cookies))//Map<String, String> cookies = res.cookies();這個cookies
                    .get();
來實現登陸

//--------------------------------------------------這是一行分隔符-------------------------------------------------------

 獲取所需要的內容 是跟JQuery選擇器差不多的方式

        根據標簽名 就doc.getElementsByTag("input")

        根據className 就doc.getElementsByClass(".class")

        以上兩個會獲取list 具體取哪個需要對照頁面決定.get(index)

        還有個根據ID獲取的 doc.getElementById("#id")

        獲取屬性的話就 element.attr() 獲取文本就 element.text()

        如果需要下載的話 就更是簡單好操作

Response resultImageResponse = Jsoup.connect(下載網址)
                                    .data(參數map)
                                    .cookies(cookies)//就是第一步獲取的cookie
                                    .ignoreContentType(true)//不加這個的話 返回只能是文本文件
                                    .execute(); 
FileOutputStream out = (new FileOutputStream(下載的文件名及路徑 可在此new File(),也可以在前面先把路徑new出來 再此處拼接文件名));  
                out.write(resultImageResponse.bodyAsBytes());             
                out.close();

        對比senium的爬蟲框架來說 Jsoup上手難度我覺得可能高一點 這個需要一定的jquery儲備而senium爬蟲完全是模擬瀏覽器操作 你怎么操作 就指使程序怎么操作 下載的話一般是 button.click()或者Action.click(button) 這種存在的主要問題在於 采用無界面的瀏覽器 對js支持可以說是非常弱 以至於click事件不好使的時候比好使的時候多 而且抓元素用id很大概率抓不到報錯 下載的文件名和路徑幾乎不能改 比較被動


        畢竟瀏覽器的下載就是這個樣子 模擬瀏覽器下載 也就只能是一樣的 存庫的時候想要獲取文件名就比較麻煩  有些下載url里面能改名 form表單的一般都是響應里面帶的名字 沒有辦法直接獲取 而senium目前據我所知支持三種瀏覽器

        一種是無界面 在內存中操作 速度很快但是js支持不好的HtmlUnitDriver

        其二是谷歌瀏覽器 需要下載驅動 對應當前的谷歌瀏覽器版本下載 最新版的瀏覽器目前是v66 對應下2.38版本驅動或2.39 下載鏈接為點擊打開鏈接   查看和自己瀏覽器匹配的版本 建議去最新的驅動里面看notes 最新的會顯示之前低版本的驅動支持瀏覽器版本。這個的好處是有界面了 更直觀 而且因為是驅動的瀏覽器 所以並不存在js的問題 click非常好處理 缺點就是需要對應版本 如果你的電腦設置了軟件自動更新 就可能存在忽然有一天爬蟲不好用了 找一圈錯發現是驅動過時了需要手動下新的 而且驅動分系統 如果是Windows系統開發 而要發布在Linux上 就可能存在用不了的問題

        第三種是火狐瀏覽器 需要火狐瀏覽器裝在默認下載位置 不在的話可以

System.setProperty("webdriver.firefox.bin", "C:\\Program Files\\Mozilla Firefox\\firefox.exe");

        進行設置更改路徑 不需要裝驅動 不過我試的時候並不好用 因為原本也沒打算繼續使用senium所以沒有深究。 使用的話 登陸就是模擬瀏覽器操作,先一步步定位到指定input輸入密碼,然后input.sendKeys(user);填入賬號密碼等信息,最后定位到指定的登陸按鈕登陸。只要不new 一個driver,就不需要再次重復登陸 去哪都用原來的driver.get(url)就可以。

        缺點顯而易見的是 如果要從某一頁的某個a標簽進入另一個 然后再返回 就比較可能混亂 尤其是帶分頁的 無論是返回還是重新進頁面 都需要設計好剛才訪問到哪一頁 driver還要重新回來的 而對比Jsoup 每次發送的請求都是新的 並不存在從一個頁面進入還要返回的情形 形象點說 senium是當前窗口打開 重新輸網址或者返回 找到上次瀏覽到哪在進入 jsoup是新標簽打開 並不存在沖突

        總結來說的話,senium比較簡單易上手,雖然存在這這那那一些問題,但是對並不頻繁爬取網頁,手動爬就可以的,已經是足夠了。Jsoup略微有一點難,但是上手之后及其好用,這個網頁就是你的了,想要什么,想怎么要,想要放在哪,叫什么名,都是十分自由的。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com