javascript
JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser
轉(zhuǎn)載自?JSOUP 教程—— Java爬蟲,簡易入門,秒殺htmlparser
關(guān)于爬蟲,之前一直用做第一個站的時候,記得那時候?qū)懙?爬蟲??是爬sina?的數(shù)據(jù),用的就是?htmlparser??可能是由于好奇和滿足我當(dāng)時的需求,那開始就各種寫啊,一個頁面,把需要的內(nèi)容處理下來,復(fù)雜的寫完后不寫注釋自己都看不懂,一直我也知道?JSOUP??好,也感覺沒空學(xué)習(xí)新的?爬蟲??(完全是借口啊)。最近我試了一下用?JSOUP??,尼瑪,完全愛上了,完全秒殺?htmlparser??。
PS:用過都知道JSOUP?是支持css select?(CSS選擇器),對于我這樣的?jQuery??用的非常6666的人來說,哪就是一個字,爽死了。
Maven??依賴包:
<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.9.2</version> </dependency>下面展示的代碼是,實現(xiàn)了相同的一個業(yè)務(wù),爬取了百度的一些內(nèi)容。但是你可以看到,Htmlparser繁瑣,JSOUP輕量級。不多說下面看代碼。
Htmlparser Java代碼:
String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50"; /**開始爬取*/ Parser parser = new Parser(url); //設(shè)置字符集 parser.setEncoding("utf-8"); //創(chuàng)建一個filter NodeFilter contentFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("id","content_left")); //通過Filter過濾 NodeList contents = parser.parse(contentFilter); //再創(chuàng)建Filter,用途通過父類去過濾子類 NodeFilter divsFilter = new AndFilter(new TagNameFilter("div"), new HasAttributeFilter("data-tools")); NodeList divs = contents.extractAllNodesThatMatch(divsFilter,true); //取值 for (int i = 0; i < divs.size(); i++) {Div div = (Div) divs.elementAt(i);String json = div.getAttribute("data-tools");if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){//獲取到j(luò)sonJSONObject jsonObj = JSONObject.fromObject(json.trim());//獲取urlString durl = jsonObj.getString("url");//內(nèi)容url//do something} } 相同業(yè)務(wù)之后改成 JSOUP Java代碼: String url = "http://www.baidu.com/s?wd=site:(www.zybang.com)&rn=50"; Document doc = Jsoup.connect(url).get(); Elements divs = doc.select("div#content_left div[data-tools]"); for (Element element : divs) {String json = element.attr("data-tools");if(StringUtils.isNotBlank(json) && json.trim().startsWith("{")){//獲取到j(luò)sonJSONObject jsonObj = JSONObject.fromObject(json.trim());//獲取urlString durl = jsonObj.getString("url");//內(nèi)容url//do something} }JSOUP??創(chuàng)建一個模擬瀏覽器行為的請求頭:
瞬間你看看,邏輯思維都符合現(xiàn)在流行的鏈?zhǔn)骄幊獭?/p> Document doc = Jsoup.connect(url).header("Accept", "*/*").header("Accept-Encoding", "gzip, deflate").header("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3").header("Referer", "https://www.baidu.com/").header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0").timeout(5000).get();
然后就開啟jQuery模式了。
//獲取id = 1 的元素的文本值。 doc.select("#1").text(); //獲取id = 1 的元素的HTML值。 doc.select("#1").html(); //獲取id =1 直接子類class='css1' , 然后所有子類的含有class = css2 的集合 doc.select("#id > .css1 .css2"); .....后面我會采用視頻講解的方式,結(jié)合實戰(zhàn)去講解。等著吧,我現(xiàn)在在整理?FreeMarker??的視頻!
總結(jié)
以上是生活随笔為你收集整理的JSOUP 教程—— Java爬虫,简易入门,秒杀htmlparser的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: get的短语搭配 get的短语有哪些
- 下一篇: 深入体验JavaWeb开发内幕——简述J