首页 > 大数据 > 可视化 > Java爬虫获取微店店铺所有商品API接口设计与实现
HttpClient,它提供了灵活的HTTP请求功能,支持多种请求方式
。Jsoup,它能够方便地解析HTML页面并提取数据
。Jsoup解析HTML,提取商品列表中的商品链接。HttpClient和
Jsoup的依赖
。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 MicroShopCrawler {
public static String getShopHomePage(String shopUrl) throws Exception {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(shopUrl);
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36");
String htmlContent = EntityUtils.toString(httpClient.execute(httpGet).getEntity(), "UTF-8");
httpClient.close();
return htmlContent;
}}import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.nodes.Element;import org.jsoup.select.Elements;import java.util.ArrayList;import java.util.List;public class MicroShopCrawler {
// 省略其他代码...
public static List<String> parseProductList(String htmlContent) {
List<String> productUrls = new ArrayList<>();
Document document = Jsoup.parse(htmlContent);
Elements productElements = document.select("div.product-item a"); // 根据微店页面结构选择合适的CSS选择器
for (Element element : productElements) {
String productUrl = element.attr("href");
productUrls.add(productUrl);
}
return productUrls;
}}public class MicroShopCrawler {
// 省略其他代码...
public static Product getProductDetails(String productUrl) throws Exception {
String productHtml = getShopHomePage(productUrl);
Document productDocument = Jsoup.parse(productHtml);
String productName = productDocument.select("h1.product-name").text();
String productPrice = productDocument.select("span.product-price").text();
String productImage = productDocument.select("img.product-image").attr("src");
String productDescription = productDocument.select("div.product-description").text();
return new Product(productName, productPrice, productImage, productDescription);
}
public static class Product {
private String name;
private String price;
private String image;
private String description;
public Product(String name, String price, String image, String description) {
this.name = name;
this.price = price;
this.image = image;
this.description = description;
}
// 省略getter和setter方法...
}}import java.io.FileWriter;import java.io.IOException;import java.util.List;public class MicroShopCrawler {
// 省略其他代码...
public static void saveProductsToFile(List<Product> products, String filePath) throws IOException {
try (FileWriter writer = new FileWriter(filePath)) {
for (Product product : products) {
writer.write("Name: " + product.getName() + "\n");
writer.write("Price: " + product.getPrice() + "\n");
writer.write("Image: " + product.getImage() + "\n");
writer.write("Description: " + product.getDescription() + "\n");
writer.write("-------------------------------\n");
}
}
}}public class MicroShopCrawler {
public static void main(String[] args) {
try {
String shopUrl = "https://example.microshop.com"; // 替换为微店店铺的实际URL
String htmlContent = getShopHomePage(shopUrl);
List<String> productUrls = parseProductList(htmlContent);
List<Product> products = new ArrayList<>();
for (String productUrl : productUrls) {
Product product = getProductDetails(productUrl);
products.add(product);
}
saveProductsToFile(products, "products.txt");
System.out.println("爬取完成,数据已保存到products.txt文件中。");
} catch (Exception e) {
e.printStackTrace();
}
}}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70041666/viewspace-3071574/ ,如需转载,请注明出处,否则将追究法律责任。