您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么使用Java爬蟲來對比某東上的數據”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Java如何做爬蟲
大家在想到爬蟲的時候,一定想說,爬蟲,這東西不是學Python的人員才能做的么?我們Java能做呢?阿粉想告訴大家的是,可以,Java語言這么多年,歷時這么久,怎么可能沒有這些內容呢,于是阿粉就開始了學習了 Java 的爬蟲道路。
Jsoup
阿粉在介紹這個類之前,肯定先得說說我們通常看到的內容是由什么組成的,現在比如說我們做開發的都知道,至少我們在電腦端訪問某東,某寶的數據的時候,他們給我們反饋的數據都是通過 HTML 來進行展示的,比如說這個樣子:
在開發的肯定都是知道,這些都是些什么意思,阿粉在這里我們就不再進行詳細的介紹,說這個 HTML 到底是個啥東西了,阿粉需要介紹的是 Jsoup ,然后告訴大家怎么使用 Jsoup 這個類爬取京東的數據。
正如官方文檔所給我們提示的內容,怎么去解析一段 HTML 代碼 :
String html = "<html><head><title>First parse</title></head>" + "<body><p>Parsed HTML into a doc.</p></body></html>"; Document doc = Jsoup.parse(html);
而這個 Document是什么呢?我們可以輸出一下看一眼,順帶著看看源碼解釋,畢竟嘛,開發人員不看這個類是干嘛的,就不是個合格的程序員不是,
輸出內容:
<html> <head> <title>First parse</title> </head> <body> <p>Parsed HTML into a doc.</p> </body> </html>
其實可以看出這里,Document實際上是給我們輸出了一個新的文檔,而且是整理之后的,相當于為之后的分析 HTML 做了專業的準備。
而我們在看源碼的注釋的時候,不難看出,Jsoup不單單是能解析我們給的這個字符串,還可以是一個URL,也可以是一個文件。
它把我們給他的 HTML 字符串轉換成了一個對象,這個對象就是我們上面看到的 Document,然后我們就可以順利成章的去使用 Document 對象里面的元素了。
上面是解析字符串,那我們看下面這個解析 URL 的存在:
public static void main(String[] args) { try { Document doc = Jsoup.connect("https://www.jd.com/?cu=true&utm_source=baidu-pinzhuan&utm_medium=cpc&utm_campaign=t_288551095_baidupinzhuan&utm_term=0f3d30c8dba7459bb52f2eb5eba8ac7d_0_f38cf584e9fb4328a3e0d2bb515e1458").get(); String title = doc.title(); System.out.println(title); }catch (IOException e){ e.printStackTrace(); } }
大家執行以下的話,就一定能夠看到這個 title 到底是什么,而結果是這個樣子的:
和我們在百度搜索的時候是不是不太一樣了,因為這個是進入之后的主頁。
Element
而在我們看源碼的時候,我們能清晰的看到,Document 是繼承了 Element 的類,那么必然可以調用 Element 里面的方法,比如說:
getElementById(String id); //是不是有點眼熟,像不像Js里面的ID選擇器 getElementsByTag(String tagName);// 通過標簽來選擇 getAllElements();//獲取所有的Element的元素
關于方法,阿粉就不再一一的進行敘述了,大家有興趣的可以去看看官方文檔,或者去看看這個源碼,包名送上 package org.jsoup.nodes
有人肯定開始煩了,說阿粉,你就別介紹了,那你說了太多廢話了,趕緊介紹爬京東,好的,這就開始,
我們在爬取之前肯定先分析京東的網址,比如說我搜索硬盤:
下面就出來了一堆數據,而我們則需要解析的就是在 HTML 種最有用的那一部分,比如:
<div class="p-price"> <strong class="J_54994027563" data-done="1"> <em>¥</em><i>879.00</i> </strong> </div>
在這里我們就記下了這個價格,然后我們去找我們要的名字
看,p-name就是我們需要的名字,那么我們就可以寫代碼了。
//這是京東的搜索網址,我們把這個keyword關鍵詞提取出來,注意中英文,中文要處理一下 String url = "https://search.jd.com/Search?keyword=" + keyword; url = url + "&enc=utf-8"; Document document = Jsoup.parse(new URL(url), 40000); //我們先找這個 List,然后一層一層的遍歷 Element element = document.getElementById("J_goodsList"); Elements elements = element.getElementsByTag("li"); for (Element el : elements) { String img = el.getElementsByTag("img").eq(0).attr("source-data-lazy-img"); String price = el.getElementsByClass("p-price").eq(0).text(); String title = el.getElementsByClass("p-name").eq(0).text(); String shop = el.getElementsByClass("p-shop").eq(0).text(); System.out.println("========================="); System.out.println("標題:" + title); System.out.println("圖片url:" + img); System.out.println("店鋪:" + shop); System.out.println("價格:" + price); }
大家看執行的效果圖:
“怎么使用Java爬蟲來對比某東上的數據”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。