日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java-jsoup爬虫

發布時間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java-jsoup爬虫 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 介紹

Jsoup是Java中的一個包,可以用于爬取頁面中的數據

Jsoup爬取數據分為以下幾個步驟:
1. 獲取所爬取網頁的Document對象
2. 找到所爬取數據所在的父級標簽,將其從Document對象中解析出來,解析出來的內容放置在Element對象中
3. 再在Element中通過每一個數據所在的子標簽去解析,解析出來的內容放置在Elements對象中
4. 最后再通過每一個Element對象中的屬性獲得想要爬取的數據

接下來以爬取京東商品頁面中的商品數據為例

2. 新建SpringBoot項目,并導入依賴

<!-- 解析網頁 --> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.10.2</version> </dependency> <!-- lombok --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional> </dependency>

3. 確認進行爬取的鏈接

進入京東官網,隨便搜索一個商品,看上方的鏈接
例如:https://search.jd.com/Search?keyword=筆記本&enc=utf-8&wq=筆記本&pvid=371fd4a6b1ef4b138e493cd39d4a34dc

去掉后面多余的參數,得到最后的目標鏈接:
https://search.jd.com/Search?keyword=筆記本

這個就是最后我們爬取數據時需要的鏈接

// 獲取請求 https://search.jd.com/Search?keyword=java String url = "https://search.jd.com/Search?keyword=" + keywords;/*解析網頁超過 30s 沒有返回就報錯Jsoup返回的Document就是瀏覽器的Document對象 */ Document document = Jsoup.parse(new URL(url), 30000);

4. 找到所有數據的父級標簽

找到所有商品所在的父級div,通過其id獲取該div的Element對象

/*J_goodsList 是京東數據展示的那個 div 的名字獲取上述 url 中 div 名字為 J_goodsList 的 html */ Element element = document.getElementById("J_goodsList");

5. 找到每個數據放置的標簽


發現頁面中每個商品的數據都是放在li里,然后通過getElementsByTag()方法獲取上述父級盒子的Element對象里所有li標簽的Element對象集合

// 獲取 J_goodsList 中的所有 li,然后進行循環 Elements elements = element.getElementsByTag("li"); for (Element el : elements) {... }

6. 準備對象

本次只爬取頁面中商品的標題,圖片鏈接和價格

@Data @NoArgsConstructor @AllArgsConstructor public class Content {private String title;private String img;private String price; }

6.1 找到數據所處的位置

位置都是通過標簽里的屬性來進行定位的

普及:
大部分圖片特別多的網站,所有的圖片都是延遲加載的,即在頁面進行渲染時,圖片的鏈接不是放在標簽的src屬性中
所謂延遲加載,意思是頁面在出現的時候,所有圖片不會立馬顯現出來,而是都會先默認顯示一張圖片,等到真正的圖片傳輸過來時才將默認圖片替換成真正的圖片

所以在這里尋找圖片鏈接時,不能去尋找圖片的src屬性

6.1.1 尋找圖片


在京東,圖片的真正地址在img標簽里的data-lazy-img屬性中。所以我們要獲取上述li標簽里的img標簽的屬性

/*getElementsByTag 通過標簽進行獲取eq(0) 獲取第一個元素attr() 獲取屬性里的值 */ String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");

6.1.2 尋找價格數據所處位置

/*getElementsByClass 通過 class 的名字進行獲取eq(0) 獲取第一個元素text() 所有的文本 */ String price = el.getElementsByClass("p-price").eq(0).text();

6.1.3 尋找標題數據所處位置

/*getElementsByClass 通過 class 的名字進行獲取eq(0) 獲取第一個元素text() 所有的文本 */ String title = el.getElementsByClass("p-name").eq(0).text();

7. 將找到的數據封裝進對象

完整代碼如下:

import com.gec.pojo.Content; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.List;public class HtmlParseUtil {public static void main(String[] args) throws IOException {new HtmlParseUtil().parseJD("搞笑").forEach(System.out::println);}public List<Content> parseJD(String keywords) throws IOException {String url = "https://search.jd.com/Search?keyword=" + keywords;Document document = Jsoup.parse(new URL(url), 30000);Element element = document.getElementById("J_goodsList");// 獲取 J_goodsList 中的所有 liElements elements = element.getElementsByTag("li");List<Content> goodsList = new ArrayList<>();// 獲取元素中的內容,這里是 el ,就是每一個li標簽for (Element el : elements) {String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");String price = el.getElementsByClass("p-price").eq(0).text();String title = el.getElementsByClass("p-name").eq(0).text();Content content = new Content();content.setImg(img);content.setPrice(price);content.setTitle(title);goodsList.add(content);}return goodsList;} }

8. 結果

Content(title=匯鑫泉運通 假山流水噴泉屏風高山水景觀流水墻水幕墻風水輪家居公司前臺風水輪招財落地擺件裝飾品 7079 (長91*寬51*高170CM), img=//img12.360buyimg.com/n7/jfs/t1/154317/8/10257/352628/5fdac831Efef04fcb/13a5e3a464c0c024.jpg, price=¥3188.00) Content(title=抖音同款網紅遙控大便屎玩具便便車發聲仿真粑粑惡搞整蠱搞笑禮物 遙控便便 普通電池款 抖音同款網紅遙控大便屎玩具便便車發聲仿真粑粑惡搞整蠱搞笑禮物 遙控便便 普通電池款, img=//img11.360buyimg.com/n7/jfs/t1/135096/39/22238/136938/61e57f8fE8f1f97a3/7a462e78f4d3b762.jpg, price=¥25.80) ...

總結

以上是生活随笔為你收集整理的java-jsoup爬虫的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。