java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS

 

java jsoup 网络爬虫 学习例子(八)京东和淘宝商品比价 PhantomJS

 



 

/*
 * filename getHtml.js
 * phantomjs.exe 2.0.0
 * author InJavaWeTrust
 */

var system = require('system');
var address = '';

if (system.args.length != 2) {
	console.log('Try to pass two args when invoking this script!');
	phantom.exit();
} else {
	address = system.args[1];
}

var page = require('webpage').create();
var url  = address;
phantom.outputEncoding = 'GBK';
page.open(url, function (status) {
	if (status !== 'success') {
		console.log('Failed to get the page!');
	} else {
		console.log(page.content);
	}
	phantom.exit();
});


package com.iteye.injavawetrust.phantomjs;

import java.util.List;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public interface ProductList {
	
	/**
	 * 爬取商品列表
	 * @return
	 */
	public List<ProductInfo> getProductList();

}


package com.iteye.injavawetrust.phantomjs;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class TBProductList implements ProductList{
	
	private static PriceCheckUtil pcu = PriceCheckUtil.getInstance();
	
	private String tbUrl;
	
	private String productName;
	
	public TBProductList(String tbUrl, String productName) {
		this.tbUrl = tbUrl;
		this.productName = productName;
	}

	@Override
	public List<ProductInfo> getProductList() {
		List<ProductInfo> tbProductList = new ArrayList<ProductInfo>();
		ProductInfo productInfo = null;
		String url = "";
		int page = 0;
		for(int i = 0; i < 10; i++){
			try {
				System.out.println("TB Product 第[" + (i + 1) + "]页");
				if(i == 0){
					url = tbUrl;
				}else{
					page += 44;
					url = Constants.TBURL + pcu.getUrlCode(productName) + Constants.TBPAGE + page;
				}
				System.out.println(url);
				Document doc = Jsoup.parse(pcu.getHtmlByPhantomjs(url));
				Elements itemlist = doc.select("div[class=m-itemlist]");
				Iterator<Element> it = itemlist.iterator();
				while(it.hasNext()){
					Element item = it.next();
					Elements items = item.select("div[data-category=auctions]");
					Iterator<Element> one = items.iterator();
					while(one.hasNext()){
						Element e = one.next();
						Elements price = e.select("div[class=price g_price g_price-highlight]>strong");
						String productPrice = price.text();
						Elements title = e.select("div[class=row row-2 title]>a");
						String productName = title.text();
						productInfo = new ProductInfo();
						productInfo.setProductName(productName);
						productInfo.setProductPrice(productPrice);
						tbProductList.add(productInfo);
					}
					
				}
			} catch(Exception e) {
				System.out.println("Get TB product has error");
				System.out.println(e.getMessage());
			}
		}
		
		
		return tbProductList;
	}
	
	public static void main(String[] args) {		
		try{
			String productName = "铅笔";
			String tbUrl = Constants.TBURL + pcu.getUrlCode(productName);
			List<ProductInfo> list = new TBProductList(tbUrl, productName).getProductList();
			for(ProductInfo pi : list){
				System.out.println("[" + pi.getProductName() + "]  [" + pi.getProductPrice() + "]");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

}


package com.iteye.injavawetrust.phantomjs;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class JDProductList implements ProductList{
	
private String jdUrl;
	
	private String productName;
	
	private static PriceCheckUtil pcu = PriceCheckUtil.getInstance();
	
	public JDProductList(String jdUrl, String productName){
		this.jdUrl = jdUrl;
		this.productName = productName;
	}

	@Override
	public List<ProductInfo> getProductList() {
		List<ProductInfo> jdProductList = new ArrayList<ProductInfo>();
		ProductInfo productInfo = null;
		String url = "";
		for(int i = 0; i < 10; i++){
			try {
				System.out.println("JD Product 第[" + (i + 1) + "]页");
				if(i == 0) {
					url = jdUrl;
				}else{
					url = Constants.JDURL + pcu.getGbk(productName) + Constants.JDENC + Constants.JDPAGE + (i + 1);
				}
				System.out.println(url);
				Document document = Jsoup.connect(url).timeout(5000).get();
				Elements uls = document.select("ul[class=gl-warp clearfix]");
				Iterator<Element> ulIter = uls.iterator();
				while(ulIter.hasNext()) {
					Element ul = ulIter.next();
					Elements lis = ul.select("li[data-sku]");
					Iterator<Element> liIter = lis.iterator();
					while(liIter.hasNext()) {
						Element li = liIter.next();
						Element div = li.select("div[class=gl-i-wrap]").first();
						Elements title = div.select("div[class=p-name p-name-type-2]>a");
						String productName = title.attr("title"); //得到商品名称
						Elements price = div.select(".p-price>strong");
						String productPrice =price.attr("data-price"); //得到商品价格
						productInfo = new ProductInfo();
						productInfo.setProductName(productName);
						productInfo.setProductPrice(productPrice);
						jdProductList.add(productInfo);
					}
				}
			} catch(Exception e) {
				System.out.println("Get JD product has error [" + url + "]");
				System.out.println(e.getMessage());
			}
		}
		return jdProductList;
	}
	
	public static void main(String[] args) {
		try {
			String productName = "书包";
			String jdUrl = Constants.JDURL + pcu.getGbk(productName)  + Constants.JDENC;
			List<ProductInfo> list = new JDProductList(jdUrl, productName).getProductList();
			System.out.println(list.size());
			for(ProductInfo pi : list){
				System.out.println(pi.getProductName() + "  " + pi.getProductPrice());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


package com.iteye.injavawetrust.phantomjs;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class Constants {
	
	/**
	 * JDURL
	 */
	public static String JDURL = "http://search.jd.com/Search?keyword=";
	/**
	 * JD汉字编码格式
	 */
	public static String JDENC = "&enc=utf-8";
	/**
	 * JD分页
	 */
	public static String JDPAGE ="&page=";
	/**
	 * TBURL
	 */
	public static String TBURL = "https://s.taobao.com/search?q=";
	/**
	 * 淘宝分页
	 */
	public static String TBPAGE = "&s=";
	/**
	 * 超时时间
	 */
	public static int TIMEOUT = 50000;
	/**
	 * 获取页面script
	 */
	public static String SCRIPT = "E:\\InJavaWeTrust\\js\\getHtml.js ";
	/**
	 * phantomjs.exe path
	 */
	public static String PHANTOMJSPATH = "D:\\Program Files\\phantomjs\\bin\\phantomjs.exe ";

}


package com.iteye.injavawetrust.phantomjs;

import java.io.Serializable;
import java.util.Date;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class ProductInfo implements Serializable{

	private static final long serialVersionUID = 8179244535272774089L;
	
	/**
	 * 商品ID
	 */
	private String productid;
	/**
	 * 商品名称
	 */
	private String productName;
	/**
	 * 商品价格
	 */
	private String productPrice;
	/**
	 * 月销售笔数
	 */
	private String tradeNum;
	/**
	 * 商品URL
	 */
	private String productUrl;
	/**
	 * 商品网店名称
	 */
	private String shopName;
	/**
	 * 电商名称
	 */
	private String ecName;
	/**
	 * 爬取入库日期
	 */
	private Date date;
	
	public String getProductid() {
		return productid;
	}
	public void setProductid(String productid) {
		this.productid = productid;
	}
	public String getProductName() {
		return productName;
	}
	public void setProductName(String productName) {
		this.productName = productName;
	}
	public String getProductPrice() {
		return productPrice;
	}
	public void setProductPrice(String productPrice) {
		this.productPrice = productPrice;
	}
	public String getTradeNum() {
		return tradeNum;
	}
	public void setTradeNum(String tradeNum) {
		this.tradeNum = tradeNum;
	}
	public String getProductUrl() {
		return productUrl;
	}
	public void setProductUrl(String productUrl) {
		this.productUrl = productUrl;
	}
	public String getShopName() {
		return shopName;
	}
	public void setShopName(String shopName) {
		this.shopName = shopName;
	}
	public String getEcName() {
		return ecName;
	}
	public void setEcName(String ecName) {
		this.ecName = ecName;
	}
	public Date getDate() {
		return date;
	}
	public void setDate(Date date) {
		this.date = date;
	}
	
}


package com.iteye.injavawetrust.phantomjs;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.TimeZone;

import org.apache.commons.logging.LogFactory;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.HttpMethod;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebRequest;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class PriceCheckUtil {
	
	private PriceCheckUtil() {
		
	}
	
	private static final PriceCheckUtil instance = new PriceCheckUtil();
	
	public static PriceCheckUtil getInstance() {
		return instance;
	}
	
	
	/**
	 * 商品汉字转码
	 * @param productName 商品名称
	 * @return
	 */
	public String getGbk(String productName){
		String retGbk = "";
		try {
			retGbk = new String(productName.getBytes("UTF-8"), "GBK");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return retGbk;
	}
	/**
	 * 对淘宝浏览器汉字进行转换
	 * @param productName 商品名称
	 * @return
	 */
	public String getUrlCode(String productName){
		String retUrlCode = "";
		try {
			retUrlCode = URLEncoder.encode(productName, "utf8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return retUrlCode;
	}
	
	/**
     * 从列表list中找到与productName相似度最高的ProductInfo
     *
     * @param productName
     * @param list
     * @return 相似度最高的productName
     */
	public ProductInfo getSimilarity(String productName, List<ProductInfo> list) {
		ProductInfo productInfo = null;
		/**
		 * 找到list中所有的productName与字符串productName的相似度,保存在lens数组中
		 */
		double lens[] = new double[list.size()];
		for (int i = 0; i < list.size() - 1; i++) {
			lens[i] = sim(productName, list.get(i).getProductName());
		}
		/**
		 * 遍历出最大的相似度maxLen
		 */
		double maxLen = 0.0;
		for (int i = 0; i < lens.length; i++) {
			if (maxLen < lens[i]) {
				maxLen = lens[i];
			}
		}
		/**
		 * 遍历出最大的相似度的索引maxLenIndex
		 */
		int maxLenIndex = 0;
		for (int i = 0; i < lens.length; i++) {
			if (maxLen == lens[i]) {
				maxLenIndex = i;
			}
		}
		productInfo = list.get(maxLenIndex);
		return productInfo;
	}
	
	/**
     * 求三个数中最小的一个
     * @param one
     * @param two
     * @param three
     * @return
     */
    public int min(int one, int two, int three) {
        int min = one;
        if(two < min) {
            min = two;
        }
        if(three < min) {
            min = three;
        }
        return min;
    }

    /**
     * 计算矢量距离
     * Levenshtein Distance(LD)
     * @param str1
     * @param str2
     * @return
     */
    public int ld(String str1, String str2) {
        int d[][];    //矩阵
        int n = str1.length();
        int m = str2.length();
        int i;    //遍历str1的
        int j;    //遍历str2的
        char ch1;    //str1的
        char ch2;    //str2的
        int temp;    //记录相同字符,在某个矩阵位置值的增量,不是0就是1
        if(n == 0) {
            return m;
        }
        if(m == 0) {
            return n;
        }
        d = new int[n+1][m+1];
        for(i=0; i<=n; i++) {    //初始化第一列
            d[i][0] = i;
        }
        for(j=0; j<=m; j++) {    //初始化第一行
            d[0][j] = j;
        }
        for(i=1; i<=n; i++) {    //遍历str1
            ch1 = str1.charAt(i-1);
            //去匹配str2
            for(j=1; j<=m; j++) {
                ch2 = str2.charAt(j-1);
                if(ch1 == ch2) {
                    temp = 0;
                } else {
                    temp = 1;
                }
                //左边+1,上边+1, 左上角+temp取最小
                d[i][j] = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+temp);
            }
        }
        return d[n][m];
    }

    /**
     * 计算相似度
     * @param str1
     * @param str2
     * @return
     */
	public double sim(String str1, String str2) {
		int ld = ld(str1, str2);
		return 1 - (double) ld / Math.max(str1.length(), str2.length());
	}
	
	/** 
     * 毫秒转换成hhmmss 
     * @param ms 毫秒 
     * @return hh:mm:ss 
     */  
    public String msToss(long ms) {
        SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");  
        formatter.setTimeZone(TimeZone.getTimeZone("GMT+00:00"));  
        String ss = formatter.format(ms);  
        return ss;  
    }
    
    /**
	 * 禁止htmlunit日志输出
	 */
	public void offLog(){
		LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log",
				"org.apache.commons.logging.impl.NoOpLog");
	}
	/**
	 * 获取淘宝数据
	 * @param url
	 * @return
	 * @throws Exception
	 */
	public String getXmlByHtmlunit(String url) throws Exception {
		offLog();
		String ret = "";
		WebClient webClient = new WebClient(BrowserVersion.CHROME);
		// 1 启动JS
		webClient.getOptions().setJavaScriptEnabled(true);
		// 2 禁用Css,可避免自动二次请求CSS进行渲染
		webClient.getOptions().setCssEnabled(false);
		// 3 启动客户端重定向
		webClient.getOptions().setRedirectEnabled(true);
		// 4 JS运行错误时,是否抛出异常
		webClient.getOptions().setThrowExceptionOnScriptError(false);
		// 5AJAX support
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
		// 6 设置超时
		webClient.getOptions().setTimeout(Constants.TIMEOUT);
		WebRequest webRequest = new WebRequest(new URL(url));
		webRequest.setHttpMethod(HttpMethod.GET);
		HtmlPage page = webClient.getPage(webRequest);
		webClient.waitForBackgroundJavaScript(10000);
		ret = page.asXml();
		webClient.close();
		return ret;
	}
	
	/**
	 * 通过Phantomjs得到html页面
	 * @param url
	 * @return
	 */
	public String getHtmlByPhantomjs(String url) {
		StringBuilder html = new StringBuilder();
		try {
			Runtime rt = Runtime.getRuntime();
			Process p = rt.exec(Constants.PHANTOMJSPATH + Constants.SCRIPT + url);
			InputStream is = p.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(is));
			String tmp = "";
			while ((tmp = br.readLine()) != null) {
				html.append(tmp);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return html.toString();
	}

}


package com.iteye.injavawetrust.phantomjs;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;

/**
 * 
 * @author InJavaWeTrust
 *
 */
public class PriceCheckMain {
	
	private static PriceCheckUtil pcu = PriceCheckUtil.getInstance();
	
	public List<Map<String, ProductInfo>> getProductList(String productName) {
		
		String jdUrl = Constants.JDURL + productName + Constants.JDENC;
		
		String tbUrl = Constants.TBURL + productName;
		
		return getProductFromUrls(jdUrl, tbUrl, productName);
	}
	
	public List<Map<String, ProductInfo>> getProductFromUrls(String jdUrl, String tbUrl, String productName) {
		List<Map<String, ProductInfo>> retListMap = new ArrayList<Map<String,ProductInfo>>();
		List<ProductInfo> jdProductList = new JDProductList(jdUrl, productName).getProductList();
		List<ProductInfo> tbProductList = new TBProductList(tbUrl, productName).getProductList();
		for(int i = 0; i < jdProductList.size(); i++){
			String jdProductName = jdProductList.get(i).getProductName();
			Map<String, ProductInfo> map = new HashMap<String, ProductInfo>();
			map.put("JD", jdProductList.get(i));
			ProductInfo tbProduct = pcu.getSimilarity(jdProductName, tbProductList);
			map.put("TB", tbProduct);
			retListMap.add(map);
		}
		
		return retListMap;
	}
	
	
	public static void main(String[] args) {
		System.out.println("输入商品名称:");
		Scanner scanner = new Scanner(System.in);
		String productName = scanner.next();
		scanner.close();
		System.out.println("京东和淘宝[" + productName + "]商品比价开始。。。。。。");
		try{
			long starTime = System.currentTimeMillis();
			List<Map<String, ProductInfo>> list = new PriceCheckMain().getProductList(productName);
			for(Map<String, ProductInfo> map : list){
				String jdName = map.get("JD").getProductName();
				String jdPrice = map.get("JD").getProductPrice();
				String ddName = map.get("TB").getProductName();
				String ddPrice = map.get("TB").getProductPrice();
				
				System.out.println("[" + jdName + "]  [" + ddName + "]");
				System.out.println("[" + jdPrice + "]  [" + ddPrice + "]");
				System.out.println("-----------------------------------------------------------");
			}
			long endTime = System.currentTimeMillis();
			System.out.println("用时 [" + pcu.msToss(endTime - starTime) + "]");
		}catch(Exception e){
			System.out.println("error");
			System.out.println(e.getMessage());
		}
	}

}

 

运行结果:

 

输入商品名称:
铅笔
京东和淘宝[铅笔]商品比价开始。。。。。。
JD Product 第[1]页
http://search.jd.com/Search?keyword=铅笔&enc=utf-8
JD Product 第[2]页
http://search.jd.com/Search?keyword=閾呯瑪&enc=utf-8&page=2

。。。。。。。。。。。。

TB Product 第[1]页
https://s.taobao.com/search?q=铅笔
TB Product 第[2]页
https://s.taobao.com/search?q=%E9%93%85%E7%AC%94&s=44

。。。。。。。。。。。。。。。。。

 

[马可9002铅笔 马克三角铅 笔易握正姿木杆 安全无毒2H HB 2B HB HB]  [马可9001铅笔 三角形杆橡皮头 学生写字铅笔 HB 2B 满28元包邮]
[12.00]  [8.96]
-----------------------------------------------------------
用时 [00:01:35]

淘宝天猫商品详情爬取 爬取商品详情。 立即下载

相关推荐

比价程序,java做的

用JAVA做的一个比价程序。

JAVA爬取淘宝、京东、天猫以及苏宁商品详细数据(一)

JAVA爬取某东、某宝以及某宁商品详细数据(一)写在最前反爬策略问题解决请求头配置无代理模式代理模式某东JDHTML解析JD商品解析天猫TMHTML解析苏宁SNHTML解析 写在最前      防止篇幅过长,对于如何爬取某东、某宝以及某宁的历史价格数据,会在下一篇博客中进行总结:https://blog.youkuaiyun.com/qq_40921561/article/details/110950930 反爬策略问题解决     某东、某宝以及某宁电商网站平台,对于爬虫还算比较友好,唯一的问题就是有些数据是动态加载

入门程序猿的博客 4876

蓝牙耳机充电仓——功能框架

数据传输:大部分充电仓会跟耳机通信,控制耳机开机、关机和进入可搜索模式等等。蓝牙耳机给大家的生活带来便利,来讲讲TWS蓝牙耳机的搭档充电仓吧!方便携带:如果耳机单独带着,指定能弄丢一个,有了充电仓就安全多了。收纳保护:把珍爱的耳机放入充电仓里,防止丢失、磕碰、刮花等。给耳机充电:提供电力补给,让耳机持续使用。

改变自己现在能改变的,珍惜自己现在所拥有的 8954

Java网络爬虫——jsoup快速上手,爬取京东数据。同时解决‘京东安全’防爬问题

java爬虫,爬取京东商品内容。同时解决登录界面跳转问题

qq_62835094的博客 9376

VS2015+Qt+OpenCV+open62541开发过程(05_VS2015中使用OPCUA open62541通过Kepware读写PLC数据)

此外还需要所需lib包:WS2_32.Lib(opcua通讯用到的库,opcua使用socket通讯,需使用此库),添加#pragma comment(lib,"ws2_32.lib") 语句,有的文章说需要添加ws2_32.lib文件或ws2_32.dll到项目资源中,貌似影响不大。2.在VS中选择x64平台会报错,选择x86平台可以用,应该是ws2_32.lib相关的库不支持64位,目前没有解决,继续后面的实验,看看用Qt后是否可以解决。6.VS中建立的变量,与读取的OPC点数据类型注意对应。

zzh17的博客 1862

Pi0 项目复现及项目问题解决方案(全网抢先发布~)

Pi0 项目复现及项目问题解决方案(全网抢先发布~)

m0_68167062的博客 2262

Java爬虫项目(一)利用Jsoup爬虫爬取天猫商品信息

前言  这是我第一次用Java来写爬虫项目,研究的也不是很透彻,所以爬虫技术的理论方面的就不说太多了。 主要还是以如何爬取商品信息为主,爬取最简单的商品信息,给出大概的思路和方法。 对于没有反爬技术的网站,爬取商品信息最简单。我测试了京东、淘宝、天猫这些大型购物网站,发现只有天猫商城是没有做任何反爬处理的,所以就从最简单的爬取天猫商品信息开始写。 思路方法 1、对于没有反爬技术的网站思路最...

耗子的博客 1万+

【MediaPipe实战】从零构建实时人脸关键点检测与表情分析系统

本文详细介绍了如何使用MediaPipe框架从零构建实时人脸关键点检测与表情分析系统。通过Python代码实现,系统能够精准检测468个3D人脸关键点,并实时分析用户表情,适用于智能交互应用。文章包含环境配置、核心实现、可视化技巧及性能优化等实战内容,帮助开发者快速掌握深度学习在计算机视觉中的应用。

weixin_30836759的博客 73

Java 爬虫爬取京东、天猫、淘宝商品数据工具类

目的: 利用Java实现爬取淘宝、京东、天猫某商品信息。 导入jsoup包 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据,我本人使用的是1.11.3版本。 当前版本的jsoup API文档:https://tool.oschina.net/apidocs/apidoc?api=jsoup-1.6.3 <dependency> <groupId&g

qq_42014514的博客 3884

OSG程序如何适配在无显卡的Ubuntu系统中

osg踩坑,希望遇到同样问题的人,可以尽快出坑,完美开发

大侠的后花园 459

基于STM32的蓝牙智能药盒设计

本研究设计了一种基于STM32F103C8T6单片机的蓝牙智能药盒系统,针对老年人用药管理需求,集成了定时提醒、药量检测、环境监测等功能。系统通过LCD1602显示屏实时显示时间与用药信息,支持每日3次定时提醒及3种药物用量设置,采用DHT11温湿度传感器、HX711药量检测模块和红外传感器实现环境监控,并通过蓝牙模块实现远程用药提醒。测试结果表明,系统定时误差≤30秒,温湿度监测精度±2℃,药量检测误差<1g,各项功能运行稳定。该设计为解决老年人用药依从性问题提供了智能化解决方案,具有实用价值和应用前景。

3254968421的博客 544

java jsoup 网络爬虫 jsoup解析html Java爬虫 Jsoup爬虫 jsoup例子

java jsoup 网络爬虫 java jsoup 网络爬虫 学习例子(一)抓取豆瓣电影名称+推荐星级 java jsoup 网络爬虫 学习例子(二)只抓取豆瓣电影5星(力荐)电影名称 java jsoup 网络爬虫 学习例子(三)抓取豆瓣电影海报图片 下载到本地 java jsoup 网络爬虫 学习例子(四)抓取网页连接插入mysql数据库 java ...

18万+

宇树 Qmini 双足机器人完全开源:3D打印+5小时组装,新手也能玩转!

教育教学,成为学校里的竞赛竞技,实验课程,论文设计的本体;开发者可以根据开源资料轻松集齐所有零部件,结构件可全部通过3D打印完成(几乎完全不需要任何机加工零部件),搭配宇树的高可靠性电机和标准电池,客户打印完零部件后,大概仅需要3~5小时的手工组装即可得到一只可爱的Qmini小双足机器人本体。一起推动机器人的未来发展,创新没有边界,创造力是无限的,Qmini就是你的第一步,如果你也想做一个能动、能学、还能萌的小双足机器人,现在就可以动手了,全开源、真低门槛、只差你的3D打印机和一点点耐心。

雕爷学编程 1891

Jsoup 网络爬虫 学习例子

发现一个很好的jsoup的学习博客,整理如下: 作者地址:http://injavawetrust.iteye.com/java jsoup 网络爬虫 学习例子(一) 抓取豆瓣电影名称+推荐星级 java jsoup 网络爬虫 学习例子(二) 只抓取豆瓣电影5星(力荐)电影名称 java jsoup 网络爬虫 学习例子(三)抓取豆瓣电影海报图片 下载到本地 java jsoup 网络爬虫 学

我家有个艳的博客 845

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit

java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit package com.iteye.injavawetrust.pricecheck; import java.util.List; /** * * @author InJavaWeTrust * */ public interface ProductL...

14万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

java 爬取京东商品详细信息 价格

java 爬取京东商品详细信息 价格 获取图中的价格,因为京东的价格有反扒机制,价格通过js加载的,直接通过页面标签是获取不到的,所以我们要去要相应的js。 http://p.3.cn/prices/mgets?skuIds=J_ 通过发现,这个链接就是查询价格的链接,J_后面跟的就是商品的id,京东商品的id很好找,就是链接中的id: 代码实现 public static String sen...

Tooth_Z的博客 2111

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java爬虫爬取京东商城

一、任务: 旨在通过使用java爬虫,提取网络中的各种商品信息,并收集的商品信息建立统一数据模型存储数据,通过数据模型描述商品的基本属性。如spu,sku,商品描述,价格等信息,同时需要剔除非必要信息,做到精准分析。根据所获取的信息提供商品展示页面,通过搜索,得到商品数据信息。抓取商品数据,建立统一数据模型,模型的可扩展性,商品数据展示。 目的:该项目有利于简单理解java的爬虫过程,spring boot简单的项目调试,调用,映射方式,数据库连接,帮助理解的前后端交互原理。 二、类及数据的设计 2

weixin_50005436的博客 5113

Java多线程爬虫爬取京东商品信息

前言网络爬虫,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫可以通过模拟浏览器访问网页,从而获取数据,一般网页里会有很多个URL,爬虫可以访问这些URL到达其他网页,相当于形成了一种数据结构——图,我们通过广度优先搜索和深度优先搜索的方式来遍历这个图,从而做到不断爬取数据的目的。最近准备做一个电商网站,商品的原型就打算从一些电商网站上爬取,这里使用了HttpClient和Jsoup实

zgj12138的博客 7785

使用java实现爬取淘宝商品页面数据

import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; public class taobao { public static void main(String[] args) { try { String url = "https://s.taobao.com/search?q=%E9%A5%B

zhouyingxiong的博客 1万+

淘宝与京东比价API接口:商品详情API返回示例,JSON返回数据结构解析

在电商竞争日益激烈的背景下,商品价格实时比对成为消费者决策、商家定价策略调整的核心需求。淘宝与京东作为国内两大电商平台,均开放了商品详情API接口,支持开发者通过标准化协议获取商品数据,实现跨平台比价、市场分析及动态定价等功能。本文将结合接口功能、数据结构及实际应用场景,解析如何通过API接口实现高效比价。

ID_18007905473的博客 840

JAVA购物返利商品比价系统源码支持微信小程序

JAVA购物返利商品比价系统源码:构建全渠道智能消费生态的技术解析

2401_84292256的博客 760

使用HttpClient+Jsoup实现网络爬虫抓取商品数据信息

使用HTTP协议客户端工具HttpClient+html页面解析技术Jsoup实现网络爬虫抓取商品数据信息示例。

积跬步,至千里。 887

jsoup爬取淘宝存入mysql_使用Java Jsoup爬取网页内容(存入本地并从本地读取)

GetPageInfo 获取数据、存入本地、从本地读取数据import lombok.SneakyThrows;import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import java.io.*;public class GetPageInfo {public static voi...

weixin_39796752的博客 283

jsoup爬取淘宝存入mysql_JAVA程序使用Jsoup 爬取网页内容

本程序将展示使用Jsoup爬取网站信息的示例,只是用于对Jsoup的学习,不会做其他使用1. 新建一个springboot项目添加Jsoup的依赖,以及mysql和mybatis的依赖,其中后面的依赖用于将爬取到的数据存入中mysql数据库中2 org.springframework.boot3 spring-boot-starter-web4 ...

weixin_34560676的博客 564

抓取淘宝天猫的商品的促销价格

通过商品的url获取促销价,天猫淘宝的促销价并不是直接生成的,而是通过js间接生成的。所以通过jsoup等工具无法抓取。 首先是尝试使用htmlUnit,因为其可以,模拟浏览器运行js、css。经试验,htmlunit确实可以运行js,尝试抓取我自己的网站,可成功获取ajax、js生成的内容。但在抓取淘宝网站时出现异常,htmlunit对网站内容的格式有一定的要求,于是只能想其他办法(以后再尝试

I am a coder 7241
上一篇: java jsoup 网络爬虫 学习例子(七)京东和淘宝商品比价 htmlunit
下一篇: java 时间毫秒转换成hhmmss
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值