Java爬蟲實戰指南:按關鍵字搜索京東商品

在電商領域,快速獲取商品信息對于市場分析、選品上架、庫存管理和價格策略制定等方面至關重要。京東作為國內領先的電商平臺之一,提供了豐富的商品數據。雖然京東開放平臺提供了官方API來獲取商品信息,但有時使用爬蟲技術來抓取數據也是一種有效的手段。本文將介紹如何利用Java按關鍵字搜索京東商品,并提供詳細的代碼示例。

一、準備工作

(一)Java開發環境

確保你的Java開發環境已經安裝了以下必要的庫:

  • Jsoup:用于解析HTML頁面。

  • HttpClient:用于發送HTTP請求。

可以通過Maven來管理這些依賴,在你的pom.xml文件中添加以下依賴:

xml

<dependencies><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency>
</dependencies>

(二)目標網站分析

在開始爬蟲之前,需要對目標網站(京東商品搜索結果頁)進行分析,了解頁面結構和數據存儲方式。打開瀏覽器的開發者工具(F12),查看商品搜索結果頁的HTML結構,確定需要提取的數據字段,如商品標題、價格、描述、銷量等。

二、代碼實現

(一)發送HTTP請求

使用HttpClient發送GET請求,獲取商品頁面的HTML內容。

java

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class HttpUtil {public static String sendGetRequest(String url) {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpGet httpGet = new HttpGet(url);httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3");return EntityUtils.toString(httpClient.execute(httpGet).getEntity());} catch (Exception e) {e.printStackTrace();}return null;}
}

(二)解析HTML內容

使用Jsoup解析HTML內容,提取商品信息。

java

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;public class JsoupUtil {public static void parseProductDetails(String html) {Document doc = Jsoup.parse(html);Elements products = doc.select(".gl-item");for (Element product : products) {String title = product.select("div.p-name").text();String price = product.select("div.p-price").text();String link = product.select("a").attr("href");System.out.println("商品名稱: " + title);System.out.println("商品價格: " + price);System.out.println("商品鏈接: " + link);System.out.println("------------------------");}}
}

(三)按關鍵字搜索商品

根據關鍵字構建搜索URL,并獲取多頁搜索結果的HTML內容。

java

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class JDProductSearch {public static List<Product> searchProducts(String keyword, int maxPages) {List<Product> allProducts = new ArrayList<>();String baseUrl = "https://search.jd.com/Search?keyword=" + keyword + "&enc=utf-8&wq=" + keyword;for (int page = 1; page <= maxPages; page++) {String url = baseUrl + "&page=" + page;try {Document doc = JDProductCrawler.getHtml(url);List<Product> products = JDProductParser.parseHtml(doc);allProducts.addAll(products);Thread.sleep(2000); // 避免請求過于頻繁} catch (IOException | InterruptedException e) {e.printStackTrace();}}return allProducts;}
}

(四)整合代碼

將上述功能整合到主程序中,實現完整的爬蟲程序。

java

import java.util.List;public class Main {public static void main(String[] args) {String keyword = "耳機";int maxPages = 3;List<Product> products = JDProductSearch.searchProducts(keyword, maxPages);for (Product product : products) {System.out.println(product);}}
}

(五)Product 類

定義一個簡單的Product類來存儲商品信息。

java

public class Product {private String title;private String img;private String price;private String shop;public Product(String title, String img, String price, String shop) {this.title = title;this.img = img;this.price = price;this.shop = shop;}@Overridepublic String toString() {return "Product{" +"title='" + title + '\'' +", img='" + img + '\'' +", price='" + price + '\'' +", shop='" + shop + '\'' +'}';}
}

三、注意事項與優化建議

(一)遵守網站的robots.txt文件

robots.txt文件定義了網站允許或禁止爬蟲訪問的規則。在編寫爬蟲之前,應仔細閱讀京東的robots.txt文件,確保爬蟲的行為符合網站的規定。

(二)合理設置請求間隔

頻繁地發送請求可能會對京東的服務器造成壓力,甚至導致IP被封禁。因此,合理設置請求間隔是必要的。可以使用Thread.sleep()方法來實現請求間隔的控制。

(三)處理異常情況

在爬蟲運行過程中,可能會遇到各種異常情況,如網絡請求失敗、頁面結構變化等。需要編寫相應的異常處理代碼,確保爬蟲的穩定性和可靠性。

(四)數據存儲與分析

獲取到的商品信息需要妥善存儲和分析。可以將數據存儲在數據庫中,如MySQL、MongoDB等,方便后續的數據查詢和分析。同時,可以使用數據分析工具或編寫數據分析腳本,對獲取到的商品信息進行深入分析,提取有價值的信息和洞察。

四、總結

通過上述步驟和代碼示例,你可以高效地利用爬蟲技術按關鍵字搜索京東商品,并獲取其詳細信息。無論是用于市場調研、競品分析還是用戶體驗優化,這些數據都將為你提供強大的支持。希望本文的示例和策略能幫助你在爬蟲開發中更好地應對各種挑戰,確保爬蟲程序的高效、穩定運行。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86778.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86778.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86778.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

aspose.word在IIS后端DLL中高并發運行,線程安全隔離

aspose.word在IIS后端DLL中運行,加載很慢,如何為全部用戶加載,再每個用戶訪問時在各自線程中直接可以打開WORD文件處理 Aspose.Words 在 IIS 中優化加載性能方案 針對 Aspose.Words 在 IIS 后端 DLL 中加載緩慢的問題&#xff0c;我們可以通過單例模式預加載組件并結合線程安…

鏈表題解——回文鏈表【LeetCode】

一、算法邏輯&#xff08;通順講解每一步思路&#xff09; 我們從 isPalindrome 這個主函數入手&#xff1a; 步驟 1&#xff1a;找到鏈表的中間節點 middleNode 使用 快慢指針法&#xff08;slow 和 fast&#xff09; 快指針一次走兩步&#xff0c;慢指針一次走一步。 當快…

allegro 銅皮的直角邊怎么快速變成多邊形?

像這種&#xff1a; 變成這種&#xff1a; 解決方案&#xff1a; shape edit boundary 點擊鋪銅邊緣就能裁剪

從廚房到代碼臺:用做菜思維理解iOS開發 - Swift入門篇②

從廚房到代碼臺&#xff1a;用做菜思維理解iOS開發 - Swift入門篇② 本章重點? 理解App開發的整體流程熟悉Xcode主界面結構與常用分區跟著步驟動手創建第一個App項目&#xff0c;認識模擬器掌握"打掃廚房"高頻快捷鍵&#xff0c;解決常見疑難雜癥 1、目標 像一個專…

EloqCloud for KV 初體驗:兼容redis的云原生KV數據庫

最近在做一些AI應用的時候&#xff0c;我在想嘗試利用redis的能力緩存一些信息&#xff0c;這使我想去找一個免費的redis來進行使用&#xff0c;在調研的過程中我發現了一款產品EloqCloud for KV可以提供類似的能力&#xff0c;于是嘗試使用了一下&#xff0c;本文記錄了這次體…

企業級路由器技術全解析:從基礎原理到實戰開發

簡介 在當今數字化時代,路由器作為網絡的核心設備,其技術深度與應用廣度直接影響著企業網絡的性能與安全性。本文將全面解析路由器的基礎原理、工作機制以及企業級開發技術,從網絡層尋址到路由協議算法,從安全配置到QoS實現,再到多廠商API開發實戰,旨在幫助網絡工程師和…

day041-web集群架構搭建

文章目錄 0. 老男孩思想-高薪四板斧1. web集群架構圖2. 搭建異地備份服務2.1 服務端-阿里云服務器2.1.1 查看rsync軟件包2.1.2 添加rsync配置文件2.1.3 添加虛擬用戶2.1.4 創建校驗用戶密碼文件2.1.5 創建備份目錄2.1.6 啟動服務2.1.7 開放安全組端口2.1.8 發送檢查郵件 2.2 客…

day44-Django RestFramework(drf)下

1.5 Django RestFramework(下) drf 內置了很多便捷的功能,在接下來的課程中會給大家依次講解下面的內容: 快速上手請求的封裝版本管理認證權限限流序列化視圖條件搜索分頁路由解析器10. 分頁 在查看數據列表的API中,如果 數據量 比較大,肯定不能把所有的數據都展示給用…

機器學習基礎 線性回歸與 Softmax 回歸

機器學習基礎 線性回歸與 Softmax 回歸 文章目錄 機器學習基礎 線性回歸與 Softmax 回歸1. 最小二乘法1.1 數據集定義1.2 最小二乘的矩陣推導1.3 最小二乘的幾何解釋1.4 概率視角下的最小二乘估計 2. 正則化2.1 L1 范數與 L2 范數2.2 正則化的作用2.3 Lasso 回歸的求解2.3.1 L-…

6.27_JAVA_面試(被抽到了)

1.MYSQL支持的存儲引擎有哪些, 有什么區別 ? In-no-DB&#xff08;默認&#xff09;&#xff1a;支持事務安全&#xff08;數據庫運行時&#xff0c;能保證數據的一致性、完整性&#xff09;&#xff0c;支持表行鎖&#xff0c;支持物理和邏輯外鍵。占用磁盤空間大。 MEMORY&…

YOLOv13震撼發布:超圖增強引領目標檢測新紀元

YOLOV13最近發布了&#xff0c;速速來看。 論文標題&#xff1a;YOLOv13&#xff1a;融合超圖增強的自適應視覺感知的實時目標檢測 論文鏈接&#xff1a;https://arxiv.org/pdf/2506.17733 代碼鏈接&#xff1a;https://github.com/iMoonLab/yolov13 話不多說&#xff0c;直…

Docker錯誤問題解決方法

1. Error response from daemon: Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) https://zhuanlan.zhihu.com/p/24228872523 2. no configuration file provided: …

大模型在惡性心律失常預測及治療方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與方法 1.3 研究創新點 二、大模型技術概述 2.1 大模型基本原理 2.2 常見大模型類型及特點 2.3 大模型在醫療領域的應用現狀 三、心律失常的術前預測與準備 3.1 術前心律失常預測的重要性 3.2 大模型在術前預測中的應…

【視頻芯片選型】

一、邊緣 AI 芯片選型邏輯與未來趨勢 &#xff08;一&#xff09;嘉楠 K230、全志 V853、瑞芯微 RK3588 對比選型 核心場景適配 嘉楠 K230&#xff1a; 適合低功耗邊緣 AI場景&#xff0c;如智能家居中控&#xff08;支持語音 視覺雙模態交互&#xff09;、電池供電設備&#…

JavaScript---DOM篇

1. DOM 概念 文檔對象模型&#xff1a;將 HTML 文檔映射為樹形結構&#xff0c;JS 可通過 DOM 操作頁面。 2. 獲取元素 document.getElementById(id) document.querySelector(CSS選擇器) document.querySelectorAll() 獲取多個 3. 操作元素 屬性操作&#xff1a; element.getAt…

第三次課:實驗室安全用電

觸電的危害 觸電的方式 安全用電與預防措施 觸電急救 時間就是生命 安全自省 安全用電常識補充

NV064NV065美光固態閃存NV067NV076

美光NV系列固態閃存技術深度解析與應用指南 技術架構革新&#xff1a;垂直堆疊與浮柵技術的突破 美光NV系列固態閃存的核心競爭力在于其232層NAND閃存技術&#xff0c;通過垂直堆疊工藝將存儲單元層層疊加&#xff0c;如同在指甲蓋面積內構建超過200層“數據樓宇”&#xff0…

設計模式精講 Day 18:備忘錄模式(Memento Pattern)

【設計模式精講 Day 18】備忘錄模式&#xff08;Memento Pattern&#xff09; 文章內容 開篇 在“設計模式精講”系列的第18天&#xff0c;我們來探討備忘錄模式&#xff08;Memento Pattern&#xff09;。這是一種行為型設計模式&#xff0c;其核心思想是在不破壞封裝性的前…

SpringCloud系列(35)--使用HystrixDashboard進行服務監控

前言&#xff1a;在上一節中我們使用了Hystrix進行服務熔斷處理&#xff0c;至此關于Hystrix的使用到此為止&#xff0c;本節內容關注的是如何使用HystrixDashboard對調用進行監控。 1、HystrixDashboard概述 Hystrix提供的準實時的調用監控(HystrixDashboard)&#xff0c;Hys…

爬蟲簡單實操2——以貼吧為例爬取“某吧”前10頁的網頁代碼

需求是將貼吧的【某個吧】里面【n頁】的網頁代碼爬取下來&#xff0c;保存至本地 首先我們要思考這個貼吧爬蟲的框架&#xff0c;要有方法可以構造url列表&#xff08;就可以一次獲取多個url&#xff09;&#xff0c;能請求獲取相應&#xff0c;能把html保存到本地。 import …