Java爬虫之Js逆向案例-拼多多商品详情数据&拼多多商品列表数据&拼多多商品优惠券数据API返回值说明

280 阅读1分钟

#Java爬虫之Js逆向案例-拼多多商品详情数据&拼多多商品列表数据&拼多多商品优惠券数据API返回值说明

本篇文章用来抓取拼多多平台整站实时商品详情数据信息、商品列表信息和商品优惠券数据,数据库采用Mysql。 爬虫的核心模块采用WebMagic,主要实现了Pinduoduo PageProcessor类,继承自PageProcessor。 采用XPath和CSS Selector两种模式抽取网页信息。如抽取商品页面用户链接信息:

String aHref = html.xpath("div[@class='item']/div[@class='user']/div[@class='u-icon']/a/@href").toString();

支持 windoes,mac 操作系统

v1.0版即将上线

1.关键词+筛选条件 采集 商品数据

2.店铺内 条件筛选 采集 商品数据

3.导出Excel

采用的是Xpath抽取方式,过程:提取html中class为item的div中的class为user的div中的class为u-icon中的超链接。封装接口代码教程如下:

1.请求方式:HTTPS GET POST

2.请求链接:c0b.cc/R4rbK2

3.请求代码示例,支持高并发请求(CURL、PHP 、PHPsdk 、Java 、C# 、Python...)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.PrintWriter;
import java.net.URLConnection;

public class Example {
	private static String readAll(Reader rd) throws IOException {
		StringBuilder sb = new StringBuilder();
		int cp;
		while ((cp = rd.read()) != -1) {
			sb.append((char) cp);
		}
		return  sb.toString();
	}
	public static JSONObject postRequestFromUrl(String url, String body) throws IOException, JSONException {
		URL realUrl = new URL(url);
		URLConnection conn = realUrl.openConnection();
		conn.setDoOutput(true);
		conn.setDoInput(true);
		PrintWriter out = new PrintWriter(conn.getOutputStream());
		out.print(body);
		out.flush();
		InputStream instream = conn.getInputStream();
		try {
			BufferedReader rd = new BufferedReader(new InputStreamReader(instream, Charset.forName("UTF-8")));
			String jsonText = readAll(rd);
			JSONObject json = new JSONObject(jsonText);
			return json;
		} finally {
			instream.close();
		}
	}
	public static JSONObject getRequestFromUrl(String url) throws IOException, JSONException {
		URL realUrl = new URL(url);
		URLConnection conn = realUrl.openConnection();
		InputStream instream = conn.getInputStream();
		try {
			BufferedReader rd = new BufferedReader(new InputStreamReader(instream, Charset.forName("UTF-8")));
			String jsonText = readAll(rd);
			JSONObject json = new JSONObject(jsonText);
			return json;
		} finally {
			instream.close();
		}
	}
	public static void main(String[] args) throws IOException, JSONException {
		// 请求示例 url 默认请求参数已经URL编码处理
		String url = "https://api-vixin.19970108018.cn/pinduoduo/item_get/?key=<您自己的apiKey>&secret=<您自己的apiSecret>&num_iid=1620002566";
		JSONObject json = getRequestFromUrl(url);
		System.out.println(json.toString());
	}

}