一文搞懂各大APP&网站python网络爬虫

本文转载自数据EDTA,相亲可以扫描下方二维码:

很久以前写了一篇爬虫的文章,把它放在CSDN上(livan1234)没想到点击量竟然暴涨,足以看到大家在数据获取方面的需求,爬虫技术现在已经非常普遍,其用途也非常广泛,很多牛人在各个领域做过相关的尝试,比如:

 1)爬取汽车之家数据,利用论坛发言的抓取以及NLP,对各种车型的车主做画像。

    2)抓取各大电商的评论及销量数据,对各种商品(颗粒度可到款式)沿时间序列的销量以及用户的消费场景进行分析。

    3)还可以根据用户评价做情感分析,实时监控产品在消费者心目中的形象,对新发布的产品及时监控,以便调整策略。

    4)抓取房产买卖及租售信息,对热热闹闹的房价问题进行分析。

    5)抓取大众点评、美团网等餐饮及消费类网站:各种店面的开业情况以及用户消费和评价,了解周边变化的口味,所谓是“舌尖上的爬虫”。以及各种变化的口味,比如:啤酒在衰退,重庆小面在崛起。

    6)58同城等分类信息网站:抓取招商加盟的数据,对定价进行分析,帮助网友解惑。

    7)拉勾网、中华英才网等招聘网站:抓取各类职位信息,分析最热门的职位以及薪水。

    8)挂号网等医疗信息网站:抓取医生信息并于宏观情况进行交叉对比。

    9)应用宝等App市场:对各个App的发展情况进行跟踪及预测。(顺便吹一下牛,我们这个榜单很早就发现小红书App的快速增长趋势以及在年轻人中的极佳口碑)

    10)携程、去哪儿及12306等交通出行类网站:对航班及高铁等信息进行抓取,能从一个侧面反映经济是否正在走入下行通道。

     11)雪球等财经类网站:抓取雪球KOL或者高回报用户的行为,找出推荐股票

     12)58同城二手车、易车等汽车类网站:什么品牌或者型号的二手车残值高?更保值?反之,什么类型的贬值较快?- 二手车,找出最佳的买车时间以及最保值的汽车。

     13)神州租车、一嗨租车等租车类网站:抓取它们列举出来的租车信息,长期跟踪租车价格及数量等信息。

     14)各类信托网站:通过抓取信托的数据,了解信托项目的类型及规模。其实还有很多数据,不一一列举了。

上次的文章是在讨论移动端的数据获取:https://blog.csdn.net/livan1234/article/details/80850978

本文对爬虫做一个全面的总结,不一定包治百病,但是能治好大部分疾病,希望能够对大家有所帮助:

1、 urllib 库:这是一个在爬虫领域绕不开的库,他支持 http 的爬取,几乎可以取到方方面面的内容。

以下面的豆瓣案例做一个简要的解释:

豆瓣小案例:

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request import re

data = urllib.request.urlopen("https://read.douban.com/provider/all").read()  

data = data.decode("utf-8")

pattern = '<div>(.*?)</div>'

mydata = re.compile(pattern).findall(data)

fh = open("出版社.txt", "w")

for i in range(0,len(mydata)): 

    fh.write(mydata[i]+"\n")

    fh.close()

常用函数:

import urllib.request 

#一、常用函数:

#1、将第一个参数中的网址,直接下载到filename  路径下,爬下来的数据为一个网页。

data = urllib.request.urlretrieve("http://www.hellobi.com",

filename="F:\python_workspace\spider_douban")

#2\清除缓存,清除urlretrieve  等下载时保存的数据

urllib.request.urlcleanup()

#3\爬取页面数据file = urllib.request.urlopen("http://www.hellobi.com")

#4\返回当环境的信息file.info()  

#5\获取当前网页的状态码和网址。

print(file.getcode()) print(file.geturl())

print(file.getcode()) print(file.geturl())

2、超时设置:

由于网络速度或者对方服务器的问题,我们爬取一个网页的时候,都需要设置时间,我们访问一个网页,如果该网页长时间未响应,那么我们的系统就会判断该网页超时了,即无法打开该网页。

有时候,我们需要根据自己的需求,来设置超时的时间值,比如:有些网站会反应快,我们希望2秒种没有反应则判断为超时,那么此时,timeout=2即为设置方式,即在 urlopen 中加入 timeout 参数。再比如,有些网站服务器反应慢,那么我们希望100秒没有反应,才判断超时,此时的timeout即设置为100,接下来为大家讲解爬虫超时的设置。

file = urllib.request.urlopen("http://www.hellobi.com",timeout=10)

for i in range(0,100):

try:

file=urllib.request.urlopen("http://yum.iqianyue.com", timeout=1)

         data=file.read()

         print(len(data)) 

    except Exception as e:

         print("出现异常:"+str(e))

3、自动模拟 Http 请求:

    客户端如果要与服务器端进行通信,需要通过http进行请求,http请求有很多种,我们在此会讲post与get两种请求方式,比如登录、搜索某些信息的时候会用到。

1)处理 get 请求:

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request keywd = "python"  

#对网址中出现的中文进行相应的编码,得到进行编码之后的中文,后面可以直接使用。keywd=urllib.request.quote(keywd)  

url = "http://www.baidu.com/s?wd"+keywd+"&ie=urf-8&tn=96542061_hao_pg"  

#将url 封装为一个请求req = urllib.request.Request(url)

data = urllib.request.urlopen(req).read() 

fh = open("test.txt","wb")  

fh.write(data)

2)理 post 请求:

<body>

<form action=””,method=”post”>

姓名:<input name=”name” type=”text”/><br>

密码:<input name=”pass” type=”text”/><br>

<input name=”” type=”submit” value=”点击提交”>

</body>

在新浪 login.sina.com.cn 中即可看到,form 为 post 方式。我们只需要 form 表单中的 name 属性即可。

如下图:

640?wx_fmt=png

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.requestimport urllib.parse"http://www.iqianyue.com/mypost/"

#设置对应的表单信息,urlencode  中针对代码中的name 值。

mydata  = urllib.parse.urlencode({

"name":"ceo@iqianyue.com"  "pass":"123456" }).encode("utf-8")

#将数据转换为请求req = urllib.request.Request(url, mydata)

#发送请求data = urllib.request.urlopen(req).read()

fh = open("test_post.txt","wb")  

fh.write(data)

4、爬虫的异常处理:

    爬虫在运行的过程中,很多时候都会遇到这样或那样的异常。如果没有异常处理,爬虫遇到异常时就会直接崩溃停止运行,下次再次运行时,又会重头开始,所以,要开发一个具有顽强生命力的爬虫,必须要进行异常处理。

    异常处理主要是为了增强代码的稳定性。

640?wx_fmt=png

    两者都是异常处理的类,HTTPError是URLError的子类,HTTPError有异常状态码与异常原因,URLError没有异常状态码,所以,在处理的时候,不能使用URLError直接替代HTTPError。如果要替代,必须要判断是否有状态码属性。

接下来我们通过实战讲解:

urlError:

1、连不上服务器2、远程的url 不存在

3、本地没有网络

4、触发了对应的 httpError 子类

具体的实战为:

#!/usr/bin/env python # _*_ UTF-8_*_

import urllib.error import urllib.request

try:

urllib.request.urlopen("http://blog.csdssn.net") 

print("111")

except urllib.error.URLErroras e:

if hasattr(e, "code"):

    print(e.code)

if hasattr(e, "reason"):

    print(e.reason)

5、爬虫的伪装技术:

    浏览器伪装技术原理:

    我们可以试试爬取csdn博客,我们发现会返回403,因为对方服务器会对爬虫进行屏蔽。此时我们需要伪装成浏览器才能爬取。

浏览器伪装我们一般通过报头进行,接下来我们通过实战分析一下。

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.error import urllib.request  

url="http://blog.csdn.net/weiwei_pig/article/details/52123738"  

header = ("User-Agent":"Mozilla/5.0  (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/56.0.2924.87 Safari/537.36")

#用来添加报头信息opener = urllib.request.build_opener()

opener.addheaders=[header] 

data =  opener.open(url).read()

fh = open("test_header","wb")  

fh.write(data)

6、新闻网站爬取:

需求:将新浪新闻首页(http://news.sina.com.cn/)所有新闻都爬到本地。

思路:先爬首页,通过正则获取所有新闻链接,然后依次爬各新闻,并存储到本地。

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request import re

data = urllib.request.urlopen("http://news.sina.com.cn/").read()  

data2 = data.decode("utf-8", "ignore")'href="(http://news.sina.com.cn/.*?)">'allurl = re.compile(pat).findall(data2)

for i in range(0, len(allurl)):

    try:

   print("第"+str(i)+"次爬取")str(i)+".html" urllib.request.urlretrieve(thisurl, file)

        print("------成功-------")

    except urllib.request.URLError as e:

   if hasattr(e, "code"):

        print(e.code)if hasattr(e, "reason"):

             print(e.reason)

640?wx_fmt=png

7、爬虫防屏蔽手段之代理服务器:

640?wx_fmt=png

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request import re

url = "http://blog.csdn.net/"

headers = ("User-Agent","Mozilla/5.0  (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/56.0.2924.87 Safari/537.36")

#建一个浏览器opener

opener = urllib.request.build_opener()

#将头加入到opener 中opener.addheaders=[headers]  

#将opener 安装为全局urllib.request.install_opener(opener)  

data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")

pat = '<h3  data-mod="popu_430" data- poputype="feed"  data-feed-show="false" data-dsm="post"><a

href="(.*?)"'

result =re.compile(pat).findall(data)

for i in range(0, len(result)):

    file = str(i)+".html" urllib.request.urlretrieve(result[i], filename=file)                print("第"+str(i)+"次爬取成功")

#由此可以将 CSDN 首页所有的文章爬取下来。

如何做代理:

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request

def use_proxy(url, proxy_addr):"http":  proxy_addr}) 

     opener = urllib.request.build_opener(proxy,

     urllib.request.HTTPHandler)"utf-8", "ignore")

          return data

proxy_addr = []

"110.73.43.18:8123" 

url = "http://www.baidu.com"data = use_proxy(url, proxy_addr)

print(len(data))

8、图片爬虫实战: 在浏览器爬取时,有时不同的浏览器会有不同的查询结果,解析出不同的源码。

首先在“审查元素”中确定元素的重点字段是哪些,然后再在“源码”中查找对应的图片位置,确定图片 url 的规则。

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request 

import re

keyname = "短裙"key = urllib.request.quote(keyname)

headers = ("User_Agent", "Mozilla/5.0  (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0")

urllib.request.install_opener(opener)

for i in range(0, 10):

      url = "https://s.taobao.com/search?q="+key+"&imgfile=&commend=all&ssid=s5-  e&search_type=item&sourceId=tb.index&spm=a21bo.2017.201856-taobao-  item.1&ie=utf8&initiative_id=tbindexz_20170306&bcoffset=4&ntoffset=4&p4  ppushleft=1%2C48&s="+str(i*44)

      data = urllib.request.urlopen(url).read().decode("utf-8", "ignore")

      pat = 'pic_url":"//(.*?)"'imagelist = re.compile(pat).findall(data)for j in range(0, len(imagelist)):

      thisimg  = imagelist[j]

 thisimgurl = "http://"+thisimg"F:/python_workspace/test/pic/"+str(i)+str(j)+".jpg" 

 urllib.request.urlretrieve(thisimgurl, filename=file)

在源码解决不了的情况下,需要进行抓包。作业:千图网的爬取(可以通过调试找到报错原因):

#!/usr/bin/env python

# _*_  UTF-8 _*_

import urllib.request import re

for i in range(1,10):"http://www.58pic.com/piccate/3-153-652-"+str(i)+".html"  

      data =  urllib.request.urlopen(pageurl).read().decode("utf-8",

"ignore")'<a.*?src="(.*?).jpg!"'

imglist = re.compile(pat).findall(data)for j in range(0,len(imglist)):

 try:"_1024.jpg"file = "F:/python_workspace/test/pic2/"+str(i)+str(j)+".jpg"  

      urllib.request.urlretrieve(thisimgurl, filename=file)

print("第"+str(i)+"页第"+str(j)+"个图片爬取成功")

     except urllib.error. URLError as e:

      if hasattr(e, "code"):

            print(e.code)if hasattr(e, "reason"):

                 print(e.reason)

     except Exception as e:

      print(e)

9、抓包分析实战(一) 

获取淘宝的评论信息、腾讯的娱乐新闻信息等需要抓包分析。如何抓取 https 的数据包以及腾讯视频的评论。

TextView:显示返回的信息;

设置完 fiddler 之后,点击要爬取的页面,回到 fiddler 中,确定有 js 内容的链接:

640?wx_fmt=png

640?wx_fmt=png

对应的网址为:

https://rate.tmall.com/list_detail_rate.htm?itemId=42679128869&spuId=315119437&sellerId=2166475645&order=3&currentPage=1&append=0&content=1&tagId=&posi=&picture=&ua=098%23E1hv%2FpvEvbQvUvCkvvvvvjiPP2Lw0jEbPL59AjnEPmPZQj1Pn2L9QjEvR2MwljE8vphvC9vhvvCvpvyCvhQvryGvCzox9WFIRfU6pwet9E7rejZIYExr1EuK46en3OkQrEttpR2y%2BnezrmphQRAn3feAOHPIAXcBKFyK2ixrlj7xD7QHYWsUtE97Kphv8vvvvvCvpvvvvvmCc6Cv2UIvvUnvphvpgvvv96CvpCCvvvmCXZCvhhmEvpvV2vvC9jx2uphvmvvv98GEKUM72QhvCvvvMMGtvpvhvvvvv8wCvvpvvUmm3QhvCvvhvvv%3D&isg=AoKCecM7b7NouHNtRCUm6rar0osk--IFkGgfUsyboPWxHyKZtOPWfQjduSCd&needFold=0&_ksTS=1508769919830_1070&callback=jsonp1071

然后确定其中的 itemId 等字段的内容,其中的部分内容未必有用处,可以直接删除,比如 上面 url的 ua 字段。

如果要抓取 https 的数据:

640?wx_fmt=png

Fiddler 默认只能抓取 HTTP 协议的网页,不能抓取 HTTPS 协议的网页,而我们很多时候,都需要抓 HTTPS 协议的网页,比如抓淘宝数据等。今天,韦玮老师会为大家讲解如何使用 Fiddler 抓取 HTTPS 协议的网页。

打开 Fiddler,点击“Tools--FiddlerOptions--HTTPS”,把下方的全部勾上,如下图所示:

640?wx_fmt=png

然后,点击 Action,选择将CA 证书导入到桌面,即第二项,导出后,点击上图的 ok 保存配置。

640?wx_fmt=png

然后在桌面上就有了导出的证书,如下所示:

640?wx_fmt=png

随后,我们可以在浏览器中导入该证书。我们打开火狐浏览器,打开“选项--高级--证书- -导入”,选择桌面上的证书,导入即可。随后,Fiddler 就可以抓 HTTPS 协议的网页 了。如下图所示。

640?wx_fmt=png

抓取腾讯视频的评论:

640?wx_fmt=png

其中有多个字段,commentid 等,在点击“加载更多”时,commentID 会发生变化,在第一个url 的源码中会找到下一个评论 url 的地址,找到 last 字段,即为下一个 url 的commentid, 以此来构造下一个 url。

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request import reimport urllib.error

headers = ("User_Agent", "Mozilla/5.0  (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0")

opener = urllib.request.build_opener()  

opener.addheaders = [headers] 

urllib.request.install_opener(opener) 

comid = "6323280825454961655"  

url = "http://coral.qq.com/article/2102904258/comment?commentid="+comid+"&req  num=20&tag=&callback=jQuery1124020025941284059412_1508770934137&_=15087  70934145"for i in range(0, 100):

data =  urllib.request.urlopen(url).read().decode() 

patnext = '"last":"(.*?)"'    nextid =  re.compile(patnext).findall(data)[0] 

patcom = '"content":"(.*?)",'  

comdata  = re.compile(patcom).findall(data) 

for j in range(0, len(comdata)):

          print("------第"+str(i)+str(j)+"条评论内容是:")

          print(eval('u"'+comdata[j]+'"')) 

          url  =

"http://coral.qq.com/article/2102904258/comment?commentid="+nextid+"&re  qnum=20&tag=&callback=jQuery1124020025941284059412_1508770934137&_=1508  770934145"

10、微信爬虫实战:

如何解决微信的限制?

640?wx_fmt=png

#!/usr/bin/env python # _*_ UTF-8 _*_

#http://weixin.sogou.com/

import reimport urllib.request import timeimport urllib.error

#自定义函数,功能为使用代理服务器爬一个网址

def use_proxy(proxy_addr, url): #建立异常处理机制try:

     req =  urllib.request.Request(url)

     req.add_header("User_Agent", "Mozilla/5.0  (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0")

     proxy =  urllib.request.ProxyHandler({'http':proxy_addr})

     opener  = urllib.request.build_opener(proxy, urllib.request.HTTPHandler)

     urllib.request.install_opener(opener)  

     data =  urllib.request.urlopen(req).read() 

return data

     except urllib.error.URLError as e:

     if hasattr(e, "code"):

    print(e.code)if hasattr(e, "reason"):

              print(e.reason)

#若为URLError  异常,延时10 秒执行time.sleep(10)

      except Exception as e:

      print("exception:"+str(e))

      time.sleep(1)

#设置关键词key = "Python" #设置代理服务器,该代理服务器有可能失效,读者需要换成新的有效代理服务器#即通过fiddler  中转爬取。proxy = "127.0.0.1:8888"#爬多少页:for i in range(0, 10):

 key =  urllib.request.quote(key)

 thispageurl  = "http://weixin.sogou.com/weixin?type=2&query="+key+"&page"+str(i)

#a="http://blog.csdn.net"

 thispagedata  = use_proxy(proxy, thispageurl) 

 print(len(str(thispagedata)))'<a href="(.*?)"'rs1 = re.compile(pat1, re.S).findall(str(thispagedata))  

 if(len(rs1)==0):

print("此次("+str(i)+"页)没有成功")

continuej in range(0, len(rs1)):

 thisurl  = rs1[j]

#提取到的网址与通过浏览器实际跳转的页面网址不完全一致,通过比#较观察发 现,爬取的页面中有amp 字段为多余。

thisurl = thisurl.replace("amp;","")

file = "F:/python_workspace/test/wechat/第"+str(i)+"页第"+str(j)+"篇文章.html"  

thisdata = use_proxy(proxy, thisurl)

try:

 fh = open(file, "wb")print("第"+str(i)+"页第"+str(j)+"篇文章成功")

except Exception as e:

 print(e)

 print("第"+str(i)+"页第"+str(j)+"篇文章失败")

微信爬虫的爬取依然是使用浏览器,即在搜狗浏览器上使用微信网页版,然后编辑这个页面的 url,以获取内容。

11、多线程爬取实战 糗事百科的代码:

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request import reimport urllib.error

headers = ("User_Agent", "Mozilla/5.0  (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0")

urllib.request.install_opener(opener)

 for i in range(1, 2):"https://www.qiushibaike.com/8hr/page/"+str(i)  

      pagedata=urllib.request.urlopen(url).read().decode("utf-8","ignore")        pat='<div>.*?<span>(.*?)</span>.*?</div>'datalist = re.compile(pat, re.S).findall(pagedata)for j in range(0, len(datalist)):

 print("第"+str(i)+"页第"+str(j)+"个段子的内容是:")

 print(datalist[j])  

将此程序改为多进程为:

#!/usr/bin/env python # _*_ UTF-8 _*_

import urllib.request import reimport urllib.error import threading  

headers = ("User_Agent", "Mozilla/5.0  (Windows NT 10.0; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0")

urllib.request.install_opener(opener)

class One(threading.Thread):

def __init__(self):

threading.Thread.__init__(self) 

def run(self):

 for i in range(1, 36, 2):

url = "https://www.qiushibaike.com/8hr/page/"+str(i)

pagedata=urllib.request.urlopen(url).read().decode("utf-  8","ignore")

pat='<div>.*?<span>(.*?)</span>.*?</div>'  

datalist = re.compile(pat, re.S).findall(pagedata)for j in range(0, len(datalist)):

print("第"+str(i)+"页第"+str(j)+"个段子的内容是:"). print(datalist[j])  

class Two(threading.Thread):

def __init__(self):

threading.Thread.__init__(self)

def run(self):for i in range(0, 36, 2):

url = "https://www.qiushibaike.com/8hr/page/"+str(i)

pagedata=urllib.request.urlopen(url).read().decode("utf-  8","ignore")

pat='<div>.*?<span>(.*?)</span>.*?</div>'  

datalist  = re.compile(pat, re.S).findall(pagedata)for j in range(0, len(datalist)):

one =  One()

one.start()

two =  Two()

two.start()

◆ ◆ ◆  ◆ ◆

长按二维码关注我们


数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:

猜你喜欢

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程(Object-Oriented Programming,简称OOP)是一种程序设计方法,它将数据和操作数据的方法组合成对象,通过定义类(class)来创建对象。下面是一些概念和原则,可以帮助你更好地理解Python面向对象编程。 1. 类和对象: - 类是一种抽象的数据类型,它定义了对象的属性和方法。 - 对象是类的实例,它具有类定义的属性和方法。 2. 属性和方法: - 属性是对象的数据,可以是整数、字符串、列表等。 - 方法是对象的行为,可以是函数或过程。 3. 封装: - 封装是将数据和对数据的操作封装在一起,以创建一个独立的实体。 - 使用类来封装数据和方法,可以隐藏实现细节,提高代码的可读性和可维护性。 4. 继承: - 继承是一种机制,允许一个类继承另一个类的属性和方法。 - 子类可以重用父类的代码,并且可以添加新的属性和方法。 5. 多态: - 多态是指同一个方法可以在不同的类中具有不同的实现方式。 - 多态可以提高代码的灵活性和可扩展性。 下面是一个简单的例子,展示了如何定义一个类、创建对象并调用对象的方法: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def say_hello(self): print(f"Hello, my name is {self.name} and I'm {self.age} years old.") # 创建对象 person = Person("Alice", 25) # 调用对象的方法 person.say_hello() ``` 这个例子定义了一个名为`Person`的类,它有两个属性(`name`和`age`)和一个方法(`say_hello`)。我们通过`Person`类创建了一个名为`person`的对象,并调用了它的`say_hello`方法。 希望这个简单的例子能帮助你更好地理解Python面向对象编程。如果你有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值