初学java爬虫,用htmlunit + jsoup解析JavaScript

java爬虫爬出异步响应的动态数据 首先这个爬虫是公司要求在网上爬取数据,Java爬取数据就不是优势所以很多框架都不是很成熟,查阅了很久可以用HtmlUnit和jsoup两个框架可以异步爬取到ajax响应的数据 用到依赖 <dependencies> <dependency> <groupId>net.sourceforge.htmlunit</groupId> <artifactId>htmlunit</artifactId&g. 阅读详情

在用jsoup爬晋江的时候,模拟登陆后仍获取不到v章内容。经验证,是因为jsoup无法解析JavaScript,而v章内容是js动态获取的。经过查阅资料,最后使用htmlunit+jsoup来实现
登陆和获取cookies在上一篇已经写了,不再赘述。

	public static String getChapterContent(Chapter chapter, String novelUrl) {
		System.out.println("正在获取第"+chapter.getChapterNum()+"章 "+chapter.getChapterTitle());
		//如果是锁章,返回
		if (chapter.getUrl() == null) {
			return chapter.getContent();
		}
		//模拟浏览器
		WebClient webClient = new WebClient(BrowserVersion.CHROME);
		//设置请求头、cookies、代理
		WebRequest request = null;
		try {
			request = new WebRequest(new URL(chapter.getUrl()));
		} catch (MalformedURLException e2) {
			e2.printStackTrace();
		}
		request.setProxyHost(ip);//设置代理
		request.setProxyPort(port);
		request.setAdditionalHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
		request.setAdditionalHeader("Accept-Encoding", "gzip, deflate");
		request.setAdditionalHeader("Accept-Language", "zh-CN,zh;q=0.9");
		request.setAdditionalHeader("Cache-Control", "max-age=0");
//		request.setAdditionalHeader("Connection", "keep-alive");
		request.setAdditionalHeader("Host", "www.jjwxc.net");
		request.setAdditionalHeader("Referer", novelUrl);
		request.setAdditionalHeader("User-Agent", USER_AGENT[randomNum]);
		// 屏蔽HtmlUnit等系统 log
		LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log","org.apache.commons.logging.impl.NoOpLog");
		java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
		java.util.logging.Logger.getLogger("org.apache.http.client").setLevel(Level.OFF);
		//启用JavaScript
		webClient.getOptions().setJavaScriptEnabled(true);
		webClient.getOptions().setCssEnabled(false);
		webClient.getOptions().setActiveXNative(false);
		webClient.getOptions().setCssEnabled(false);
		webClient.getOptions().setThrowExceptionOnScriptError(false);
		webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
		webClient.getOptions().setTimeout(5000);
		webClient.getCookieManager().setCookiesEnabled(true);//开启cookies
		for (String key : cookies.keySet()) {//设置cookies
			Cookie cookie = new Cookie(DOMAIN, key, cookies.get(key));
			webClient.getCookieManager().addCookie(cookie);
		}
		
		HtmlPage rootPage = null;
		try {
			rootPage = webClient.getPage(request);
		} catch (FailingHttpStatusCodeException | IOException e1) {
			System.out.println("文章页获取失败");
			e1.printStackTrace();
		}
		//设置一个运行JavaScript的时间
		webClient.waitForBackgroundJavaScript(500);
		String html = rootPage.asXml();
		Document doc = Jsoup.parse(html);
		//为了保留换行
		String content = Jsoup.clean(new String(doc.getElementsByClass("noveltext").get(0).html()), "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
		//去头去尾
		int beginIndex = content.indexOf("查看收藏列表") + "查看收藏列表".length();
		int endIndex = content.lastIndexOf("插入书签");
		int authorIndex = content.lastIndexOf("插入书签") + "插入书签".length();
		if (beginIndex != -1 && endIndex != -1 && authorIndex != -1) {
			content = content.substring(beginIndex, endIndex).trim() + content.substring(authorIndex).trim();
		}
		return content;
	}
props2js工具 读取Java属性文件,并给出Json、Jsoup、JavaScript3种格式的输出。(Nicholas C.Zakas编写) 立即下载

相关推荐

脑机接口最新发展动态报告 (2024-2025)

脑机接口动态

高山 4106

Jsoup获取网页中以javascript加载的数据的方法

Jsoup是一款java的HTML解析器,可以帮助我们在网页中获得更多数据源,但是有的信息浏览器中显示了,却无法抓取信息,应为该信息不是直接在标签内的,而是元素加载完成事件,javascript加载完成获取数据,而Jsoup不是浏览器,无法运行javascript.原理图如下![解析过程图(https://img-blog.csdnimg.cn/20190220211600499.png?x-os...

lilei的博客 4766

用户行为数据分析 User Behavior Data from Taobao for Recommendation

一、提出问题 二、理解数据 数据来源 阿里云天池数据集:(https://tianchi.aliyun.com/dataset/dataDetail?dataId=649) 本文选取的数据集为UserBehavior.csv,共有5242880条数据。数据的具体类别如下表所示: 用户行为种类有四种,如下表所示 对于数据维度的说明如下: 在本文选取的2017年11月25日到2017年12月3日的时间范围内,不重复的用户数量为10202,不重复的商品ID数为412369,不重复的商品类目ID数为5859,

cccxxxqq的博客 5206

Jsoup(一)Jsoup详解(官方)

一、Jsoup概述 1.1、简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,  可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1.2、Jsoup的主要功能 1)从一个URL,文件或字符串中解析HTML 2)使用DOM或CSS选择器来查找、取出数据 ...

a878787877的专栏 2427

华为OD机试真题 新系统【网络数据包收发处理】

华为OD机试 新系统真题【网络数据包收发处理】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【网络数据包收发处理】多语言题解。

qq_45776114的博客 444

TSP:车为什么能和云端交互?

TSP:车为什么能和云端交互?

天赐好车的博客 410

jsoup抓取html中的js,jsoup 抓取javascript代码 求详解 (汽车之家 )

packagecom.youche.data.carmodel.carfamily;importorg.jsoup.nodes.Document;importorg.jsoup.nodes.Element;importorg.jsoup.select.Elements;importcom.youche.data.carmodel.crawler.DatabaseOperator;impo...

weixin_35639750的博客 561

毕设-MobileNetV4:给YOLOv8装上轻量化“引擎”——通用瓶颈与C2f融合的实战教程

本文介绍了一种将MobileNetV4与YOLOv8结合的目标检测模型轻量化方案。MobileNetV4通过通用瓶颈(UB)结构实现多任务适配,其核心改进包括动态卷积核、注意力机制和多路径特征聚合,显著提升特征提取能力。作者详细阐述了如何在YOLOv8框架中实现MobileNetV4的通用瓶颈模块,包括"膨胀-卷积-注意力-压缩"的流程设计,并构建完整的backbone网络。该方案通过融合MobileNetV4的轻量化优势与YOLOv8的高效检测架构,在移动设备上实现了精度与速度的良好平

FJN110的博客 505

Jsoup详解

一、Jsoup概述 1.1、简介     jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,  可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 1.2、Jsoup的主要功能     1)从一个URL,文件或字符串中解析HTML     2)使用DOM或CSS选择器来查找、取出数据     3...

cuishouming的博客 2万+

matlab计算图像信噪比SNR

【代码】matlab计算图像信噪比SNR。

baidu_34971492的博客 1395

RK3399驱动开发 | 19 - 阿美林7寸mipi屏幕调试(基于linux4.4.194内核)

NULL

Mculover666的博客(嵌入式) 2661

深入理解Jsoup:Java的HTML解析神器

在这篇文章中,我们深入探讨了Jsoup,这是一个用于处理HTML的强大Java库。我们首先了解了Jsoup的基本概念,然后通过实际示例展示了如何使用Jsoup来解析HTML,提取元素和数据。我们进一步探讨了Jsoup的常用方法,如连接和获取文档,查询和提取元素等。此外,我们还讨论了Jsoup在网络爬虫中的应用,并展示了一个简单的网络爬虫示例。最后,我们对Jsoup进行了横向对比,与JDOM、DOM4J、HTMLUnit等其他HTML处理技术进行了比较。

djmacdtr的博客 2436

8155源码编译DSP(ubuntu环境下)

一.设置环境变量 -users:/$ sudo gedit ~/.bashrc #set adsp cdsp tools path #export ARMLMD_LICENSE_FILE=<LICENSE FILE INFO> #export ARMTOOLS=RVCT221 #export ARMROOT=/pkg/asw/compilers/arm/ADS1.2 #export ARM_COMPILER_PATH=/pkg/qct/software/arm/RVDS/2.2BLD593

Johnny2004的专栏 1676

探索 Java 网络爬虫:Jsoup、HtmlUnit 与 WebMagic 的比较分析

在当今信息爆炸的时代,网络数据的获取和处理变得至关重要。对于 Java 开发者而言,掌握高效的网页抓取技术是提升数据处理能力的关键。本文将深入探讨三款广受欢迎的 Java 网页抓取工具:Jsoup、HtmlUnit 和 WebMagic,分析它们的功能特点、优势以及适用场景,以助开发者选择最适合自己项目需求的工具。

蜗牛的博客 4095

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

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

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

Java采集数据:使用代理IP采集新闻资讯代码解析

对于数据采集初学者而言,本文介绍如何使用代理IP、多线程采集新闻资讯数据。废话不多说,直接上代码,有些不好理解的地方看注释吧。

无忧代理IP 302

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

java网络爬虫-jsoup抓取js(script)中的变量值

package com.hxqc.pricemonitor.trans; import java.util.HashMap; import java.util.Map; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.selec...

weinichendian的博客 3万+

利用htmlunit和jsoup来实现爬取js的动态网页实践(执行js)

这两天在做一个有关于网络爬虫的系统 但是呢,一开始爬的时候就发现问题,js的动态页面的爬不下来 网上找了好多方法,google也问了,主要还是提到htmlunit,于是就用了, 在pairsfish的csdn博客上,我找到了方法: /**HtmlUnit请求web页面*/ WebClient webClient = new WebClient();

anLA_的专栏 3万+

JavaScript 中 xml 的解析(jsoup 解析器)

目录 一、概述 二、dom 和 sax 解析对比 三、解析器 四、Jsoup解析器 1、导入 jar 包 2、获取 Document 对象 3、获取对应的标签 Element 对象 4、获取数据 5、快捷查询 一、概述 xml 的解析就是操作 xml 文档,将文档内容读取到内存中,解析的方法两种 dom:将标记语言文档一次性加载到内存,在内存中形成一颗 dom 树 sa...

ONESTARの博客 2217

jsoup解析

jsoup官方文档https://www.open-open.com/jsoup/    我们抓取到页面之后,还需要对页面进行解析。可以使用字符串处理工具解析页面,也可以使用正则表达式,但是这些方法都会带来很大的开发成本,所以我们需要使用一款专门解析html页面的技术。   jsoup 是一款基于 Java 语言的 HTML 请求及解析器,可直接请求某个 URL 地址、解析 HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM、CSS 以及类似于 jQuery 的操作方法来取出和操作数据。  

qq_45347184的博客 815

javascript解析引擎,jsoup解析script

大家好,本文将围绕javascript解析引擎展开说明,jsoup解析script是一个很多人都想弄明白的事情,想搞清楚开源js解释器需要先了解以下几个事情。大家好,给大家分享一下java解析json字符串为对象,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

2301_79533350的博客 578

Java网络爬虫框架之Jsoup与HtmlUnit

1.背景介绍 1. 背景介绍 Java网络爬虫框架之Jsoup与HtmlUnit是两个非常流行的Java网络爬虫库,它们都提供了简单易用的API来抓取和解析HTML文档。Jsoup是一个基于Java的HTML解析器,它可以用来解析HTML文档并提取有用的信息。HtmlUnit是一个基于JavaScript的HTML解析器,它可以用来解析HTML文档并执行JavaScript代码。 这两个库在...

AI天才研究院 1939

jsoup 的基本使用以及API内容

下面是 Jsoup 的 API,参考自:jsoup官方文档 public class org.jsoup.Jsoup 类 extends Object 所有方法 修饰符和类型 方法名称 描述 static String clean​(String bodyHtml, String baseUri, Whitelist whitelist) 通过解析输入HTML并通过允许的标签和属性的白名单对其进行过滤,从不受信任的输入HTML中获得安全的HTML。 static String clean

shijialeya 7793

JAVA爬虫--JS文件数据快速解析

最近在做一个足球数据爬虫,连接的是某常用足球比分直播平台的网站。在抓取的过程中方法很简单。打开网页地址,进入开发者模式,查看其数据加载。发现其比分数据是采用获取平台js文件的方式从服务器下载下来然后执行js进行比分展现的.仅供交流学习用。 使用jsoup开源框架进行获取,在代码中合理的设置header。代码如下:解析方法如下:输出结果:...

weixin_34167819的博客 941

selenium-java 解决 jsoup遇到javascript重定向无法获取内容的问题

问题 通过jsoup爬网站的时候,遇到javascript重定向,递归无果,查了许多资料都无法解决在这里插入代码片 利用selenium龟速实现,先解决问题 maven依赖 <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java --> <depe...

qq_41686921的博客 929

jsoup之页面解析

通过java不用正则表达式,实现对页面标签的过滤或解析。 我们平时上网用的浏览器,除了根据用户输入的url完成通信,还要解析执行javascript代码浏览器在发送http请求时,会在头部里面加入很多信息,比如Cookie/userAgent等。所以网站可以根据这些信息来确定这个请求时正常的用户请求还是爬虫集群请求,对于后者,为了减轻网站压力服务器通常不予回应,所以该系统在使用jsoup工具时,会...

清风自来 901
上一篇: 初学java爬虫,用jsoup爬晋江免费章节
下一篇: 解决Invalid character found in the request target. The valid characters are defined in RFC 7230 and R
MervynLammm
博客等级 码龄11年 20粉丝 66原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值