Ⅰ 求!為什麼我用htmlUnit抓取淘寶購買記錄時,得到的html和在頁面上直接右鍵查看到的html不同
因為抓取的可能是動態生成的網頁 而右鍵的是一些靜態的網頁
Ⅱ 為什麼我引用htmlunit的代碼包,就會報錯
package htmlunit;
import java.io.IOException;
import java.net.MalformedURLException;
import org.htmlparser.visitors.HtmlPage;
import com.gargoylesoftware.htmlunit.;
import com.gargoylesoftware.htmlunit.WebClient;
public class WebClientTest {
public static void main(String args[]){
final WebClient webClient = new WebClient();
HtmlPage page;
try {
page = webClient.getPage fo");
System.out.println(page.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
webClient.closeAllWindows();
}
}
Ⅲ htmlunit jar包怎麼用
將lib目錄下的所有.jar文件復制到任意目錄(如:c:\htmlunit\lib\)
然後右擊我的電腦->屬性->高級->環境變數->系統變數 中,對CLASSPATH進行編輯,如果沒有就新建一個(如果運行java或編譯時有錯誤,就在)
務必將所有.jar文件的詳細地址添加到CLASSPATH中,而不是用「c:\htmlunit\lib\」來代替,如.;c:\htmlunit\lib\1.jar;c:\htmlunit\lib\2.jar; 才是正確的寫法
務必每一個都寫清楚,需要注意最前面有個點".",最後面有個";"
Ⅳ 開源爬蟲框架各有什麼優缺點
首先爬蟲框架有三種
分布式爬蟲:Nutch
JAVA單機爬蟲:Crawler4j,WebMagic,WebCollector
非JAVA單機爬蟲:scrapy
海量URL管理
網速快
Nutch是為搜索引擎設計的爬蟲,大多數用戶是需要一個做精準數據爬取(精抽取)的爬蟲。Nutch運行的一套流程里,有三分之二是為了搜索引擎而設計的。對精抽取沒有太大的意義。
用Nutch做數據抽取,會浪費很多的時間在不必要的計算上。而且如果你試圖通過對Nutch進行二次開發,來使得它適用於精抽取的業務,基本上就要破壞Nutch的框架,把Nutch改的面目全非。
Nutch依賴hadoop運行,hadoop本身會消耗很多的時間。如果集群機器數量較少,爬取速度反而不如單機爬蟲。
Nutch雖然有一套插件機制,而且作為亮點宣傳。可以看到一些開源的Nutch插件,提供精抽取的功能。但是開發過Nutch插件的人都知道,Nutch的插件系統有多蹩腳。利用反射的機制來載入和調用插件,使得程序的編寫和調試都變得異常困難,更別說在上面開發一套復雜的精抽取系統了。
Nutch並沒有為精抽取提供相應的插件掛載點。Nutch的插件有隻有五六個掛載點,而這五六個掛載點都是為了搜索引擎服務的,並沒有為精抽取提供掛載點。大多數Nutch的精抽取插件,都是掛載在「頁面解析」(parser)這個掛載點的,這個掛載點其實是為了解析鏈接(為後續爬取提供URL),以及為搜索引擎提供一些易抽取的網頁信息(網頁的meta信息、text)
用Nutch進行爬蟲的二次開發,爬蟲的編寫和調試所需的時間,往往是單機爬蟲所需的十倍時間不止。了解Nutch源碼的學習成本很高,何況是要讓一個團隊的人都讀懂Nutch源碼。調試過程中會出現除程序本身之外的各種問題(hadoop的問題、hbase的問題)。
Nutch2的版本目前並不適合開發。官方現在穩定的Nutch版本是nutch2.2.1,但是這個版本綁定了gora-0.3。Nutch2.3之前、Nutch2.2.1之後的一個版本,這個版本在官方的SVN中不斷更新。而且非常不穩定(一直在修改)。
先說python爬蟲,python可以用30行代碼,完成JAVA
50行代碼乾的任務。python寫代碼的確快,但是在調試代碼的階段,python代碼的調試往往會耗費遠遠多於編碼階段省下的時間。
使用python開發,要保證程序的正確性和穩定性,就需要寫更多的測試模塊。當然如果爬取規模不大、爬取業務不復雜,使用scrapy這種爬蟲也是蠻不錯的,可以輕松完成爬取任務。
bug較多,不穩定。
Ⅳ HtmlUnit 怎樣模擬window.open出來的page
您好,我來為您解答:
類裡面的代碼:
...
HtmlForm htmlForm1 = (HtmlForm) page.getForms().get(2);
page = (HtmlPage) htmlForm1.getInputByName("new").click();
...
但是這個page還是原來的page,我想獲得彈出來的page,HtmlUnit的文檔中說的是加個
WebWindowListener。
希望我的回答對你有幫助。
Ⅵ htmlunit 從哪個版本 開始 java8
Java核心技術第8版 此書較新
根據卓越網的信息對比
Java2核心技術卷Ⅰ:基礎知識(第7版)(英文版) 霍斯特曼,,,美%康奈爾,,,美 人民郵電出版社
JAVA核心技術卷1:基礎知識(原書第8版)(Sun公司核心技術叢書)
作者:(美國 )(Horstmann Gay S.)昊斯特曼 (美國)Gary Cornell
機械工業出版社
實際上是同一本書,兩個翻譯版本而已,顯然原書第8版較新
Ⅶ 如何用htmlunit向伺服器javascrtipt提交數據和得到運行結果
看了下你的網站,你的目的應該是測試按下搜索按鈕之後顯示的結果網頁裡面的內容是否符合預想吧,其實htmlunit本身相當於模擬了一個瀏覽器,所以你不需要分別執行那幾個javascript,只要用htmlunit的webclient用你的地址裝入網頁(這時候他會自動裝入需要的javascript並執行),然後用你會得到一個htmlpage對象,從裡面找到需要填值的input對象,設置參數,然後找到搜索按鈕,模擬點擊即可,然後webclient會像真正的瀏覽器一樣做submit,並更新他內部的網頁數據,之後你只要在更新過的htmlpage對象中尋找預想結果應該生成的網頁對象並判斷其值是否正確即可。
我沒有用過python版的htmlunit,我用的是java版,但用法應該類似,你也可以參考下面的這個網頁,當然他只做到了submit,之後的對結果的判斷做法是類似的,也可以用你上面寫的通過xpath到結果網頁裡面尋找的方法。
http://blog.csdn.net/xuweilinjijis/article/details/8984290
Ⅷ htmlunit如何不通過id和name獲取button,並提交表單。跪求高手您是如何解決的
登錄按鈕:
<input name="" type="image" src="../images/button_login.gif" class="input_img">
實現方法:
我用的class,當然也可以換成type或src,屬性都可以作為判斷條件
HtmlImageInput btnSubmit=null;
DomNodeList<DomElement> domElements=htmlpage.getElementsByTagName("input");
for(DomElement temp:domElements){
if(temp.getAttribute("class").equals("input_img")){
btnSubmit= (HtmlImageInput) temp;
}
}
Ⅸ 用htmlunit怎麼去獲取一個有JS載入的網頁信息
有兩種方式供選擇我推薦第一種,一:去閱讀相關的網頁里的js和網頁請求之後的header,通過hander知道這個獲取這個信息的介面。通過httpclient來獲知你想要的信息。二:通過htmlunit框架提供的方法:
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver;
jsExecutor.executeScript("LoginSubmit();", "");這里的LoginSubmit就是頁面里的js方法名稱(頁面里要有這個js方法,當然你也可以自己寫一些js)。然後通過dom操作來獲取你想要的信息。
Ⅹ 滾動條 htmlunit 怎麼處理
HtmlUnit 是一個模擬瀏覽器的行為的開源工具,可以打開網頁,填寫表單等。