131-1198-7613
NEWS
网站建设、网站制作、网站设计等相关资讯

apikey怎么获取_ChatGPT的apikey怎么获取(api key怎么获取)

首页 >> 新闻资讯 作者:磁力SEO 来源:磁力SEO - 搜索引擎优化技巧 日期:2025-02-21

  泉源:lyrichu

  www.cnblogs.com/lyrichu/p/6635798.html

  若有好文章投稿,请点击 → 这里了解详情

  迩来在研究文本挖掘干系的内容,所谓巧妇难为无米之炊,要想进行文本分析,首先获得有文本吧。获取文本的方式有许多,好比从网上下载现成的文本文档,或许通过第三方提供的API进行获取数据。可是有的时间我们想要的数据并不能直接获取,因为并不提供直接的下载渠道或许API供我们获取数据。那么这个时间该怎么办呢?有一种比较好的举措是通过收集爬虫,即编写打定机程序伪装成用户去获得想要的数据。操纵打定机的高效,我们可以轻松快速地获取数据。

  那么该奈何写一个爬虫呢?有许多种语言都可以写爬虫,好比Java,php,python 等,我个人比较喜爱操纵python。因为python不单有着内置的功能强盛的收集库,尚有诸多杰出的第三方库,别人直接造好了轮子,我们直接拿过来用就可以了,这为写爬虫带来了极大的利便。不夸张地说,操纵不到10行python代码着实就可以写一个小小的爬虫,而操纵其他的语言可以要多写许多代码,轻便易懂正是python的庞大的优势。

  好了废话不多说,进入今日的正题。迩来几年网易云音乐火了起来,我自己就是网易云音乐的用户,用了几年了。以前用的是QQ音乐和酷狗,通过我自己的亲身经历来看,我觉得网易云音乐最优特色的就是其精准的歌曲举荐和独具特色的用户品评(审慎声明!!!这不是软文,非广告!!!仅代表个人观点,非喜勿喷!)。经常一首歌曲下面会有一些被点赞浩繁的神品评。加上前些日子网易云音乐将精选用户品评搬上了地铁,网易云音乐的品评又火了一把。所以我想对网易云的品评进行阐明,发现其中的纪律,出格是阐明一些热评具有什么配合的特点。带着这个目的,我最先了对网易云品评的抓取工作。

  python内置了两个收集库urllib和urllib2,可是这两个库操纵起来不是出格利便,所以在这里我们操纵一个广受好评的第三方库requests。操纵requests只用很少的几行代码就可以实现配置代理,模拟登陆等比较复杂的爬虫工作。如果已经安装pip的话,直接操纵pip install requests 即可安装。中文文档所在在此https://docs.python-requests.org/zh_CN/latest/user/quickstart.html,大家有什么标题可以自行参考官方文档,上面会有很是详细的介绍。至于urllib和urllib2这两个库也是比较有用的,以后如果有机缘我会再给大家介绍一下。

  在正式最先介绍爬虫之前,首先来说一下爬虫的底子工作道理,我们知道我们打开浏览器会见某个网址本质上是向办事器发送了必定的请求,办事器在收到我们的请求之后,会凭据我们的请求返回数据,然后通过浏览器将这些数据阐明好,呈现在我们的眼前。如果我们操纵代码的话,就要跳过浏览器的这个步伐,直接向办事器发送必定的数据,然后再取回办事器返回的数据,提取出我们想要的信息。可是标题是,有的时间办事器须要对我们发送的请求进行校验,如果它觉得我们的请求黑白法的,就会不返回数据,或许返回错误的数据。所以为了禁止发生这种情况,我们有的时间须要把程序伪装成一个正常的用户,以便顺利获得办事器的回应。奈何伪装呢?这就要看用户通过浏览器会见一个网页与我们通过程序会见一个网页之间的区别。每每来说,我们通过浏览器会见一个网页,除了发送会见的url之外,还会给办事发送额外的信息,好比headers(头部信息)等,这就相当于是请求的身份证实,办事器看到了这些数据,就会知道我们是通过正常的浏览器会见的,就会乖乖地返回数据给我们了。所以我们程序就得像浏览器一样,在发送请求的时间,带上这些标志着我们身份的信息,这样就能顺利拿到数据。有的时间,我们必需在登录状况下才气获得一些数据,所以我们必需要模拟登录。本质上来说,通过浏览器登录就是post一些表单信息给办事器(包含用户名,密码等信息),办事器校验之后我们就可以顺利登录了,操纵程序也是一样,浏览器post什么数据,我们原样发送就可以了。关于模拟登录,我反面会专门介绍一下。当然事情有的时间也不会这么顺利,因为有些网站配置了反爬步调,好比如果会见过快,偶尔间会被封ip(范例的好比豆瓣)。这个时间我们还得要配置代理办事器,即变更我们的ip所在,如果一个ip被封了,就换此外一个ip,详细怎么做,这些话题以后逐渐再说。

  最后,再介绍一个我觉得在写爬虫过程中很是有用的一个小本事。如果你在操纵火狐浏览器或许chrome的话,或许你会寄望到有一个叫作开发者工具(chrome)或许web节制台(firefox)的处所。这个工具很是有用,因为操纵它,我们可以清晰地看到在会见一个网站的过程中,浏览器到底发送了什么信息,办事器究竟返回了什么信息,这些信息是我们写爬虫的要害所在。下面你就会看到它的庞大用处。

————————正式最先的分割线——————————

  首先打开网易云音乐的网页版,随便选择一首歌曲打开它的网页,这里我以周杰伦的《晴天》为例。如下图1

  

图1

  接下来打开web节制台(chrom的话打开开发者工具,如果是其他浏览器应该也是类似),如下图2

图2

  然后这个时间我们须要点选收集,扫除所有的信息,然后点击从头发送(相当于是刷新浏览器),这样我们就可以直观看到浏览器发送了什么信息以及办事器回应了什么信息。如下图3

  

图3

  刷新之后获得的数据如下图4所示:

  

图4

  可以看到浏览器发送了很是多的信息,那么哪一个才是我们想要的呢?这里我们可以通过状况码做一个初步的鉴定,status code(状况码)标志了办事器请求的状况,这里状况码为200即表示请求正常,而304则表示不正常(状况码种类很是多,如果要想详细了解可以自行搜索,这里不说304详细的含义了)。所以我们日常只用看状况码为200的请求就可以了,尚有就是,我们可以通过右边栏的预览来大致调查办事器返回了什么信息(或许查察响应)。如下图5所示:

  

图5

  通过这两种方法团结日常我们就可以快速找到我们想要阐明的请求。寄望图5中的请求网址一栏便是我们想要请求的网址,请求的方法有两种:get和post,尚有一个须要重点关注的就是请求头,里面包含了user-Agent(客户端信息),refrence(从何处跳转过来)等多种信息,日常无论是get照旧post方法我们城市把头部信息带上。头部信息如下图6所示:

  

图6

  此外还须要寄望的是:get请求日常就直接把请求的参数以?parameter1=value1parameter2=value2 等这样的形式发送了,所以不须要带上额外的请求参数,而post请求则日常须要带上额外的参数,而不直接把参数放在url傍边,所以有的时间我们还须要关注参数这一栏。经过过细寻找,我们终于找到本来与品评干系的请求在https://music.163.com/weapi/v1/resource/comments/R_SO_4_186016?csrf_token= 这个请求傍边,如下图7所示:

  

图7

  点开这个请求,我们发现它是一个post请求,请求的参数有两个,一个是params,尚有一个是encSecKey,这两个参数的值很是的长,感觉应该像是加密过的。如下图8所示:

  

图8

  办事器返回的和品评干系的数据为json花样的,里面含有很是厚实的信息(好比有关品评者的信息,品评日期,点赞数,品评内容等等),如下图9所示:(着实hotComments为热点品评,comments为品评数组)

图9

  至此,我们已经确定了偏向了,即只须要确定params和encSecKey这两个参数值即可,这个标题困扰了我一下午,我弄了很久也没有搞清晰这两个参数的加密方式,可是我发现了一个纪律,https://music.163.com/weapi/v1/resource/comments/R_SO_4_186016?csrf_token= 中 R_SO_4_反面的数字就是这首歌的id值,而对于不同的歌曲的param和encSecKey值,如果把一首歌好比A的这两个参数值传给B这首歌,那么对于类似的页数,这种参数是通用的,即A的第一页的两个参数值传给其他任何一首歌的两个参数,都可以获得响应歌曲的第一页的品评,对于第二页,第三页等也是类似。可是遗憾的是,不同的页数参数是不同的,这种举措只能抓取有限的几页(当然抓取品评总数和热点品评已经富足了),如果要想抓取所有数据,就必需搞大白这两个参数值的加密方式。觉得没有搞大白,昨天晚上我带着这个标题去知乎搜索了一下,居然真的被我找到了谜底。在这个标题https://www.zhihu.com/question/36081767 下,@平胸小仙女 这位知友详细分析白奈何破解这两个参数的加密过程,我研究了一下,发现照旧有点小复杂的,按照他写的方法,我改动了一下,就成功获得了所有的品评。这里要对@平胸小仙女(个人主页 https://www.zhihu.com/people/luocaodan/answers)表示感谢。如果大家对于破解参数加密有爱好的话,可以去直接参考原帖,所在是:https://www.zhihu.com/question/36081767。

  到此为止,奈何抓取网易云音乐的品评所有数据就所有讲完了。按照惯例,最后上代码,亲测有用:

  #!/usr/bin/env python2.7

  # -*- coding: utf-8 -*-

  # a href="https://www.jobbole.com/members/dai745726163"@Time/a : 2017/3/28 8:46

  # @Author : Lyrichu

  # a href="https://www.jobbole.com/members/Email"@Email/a : 919987476@qq.com

  # @File : NetCloud_spider3.py

  '''

  @Deion:

  网易云音乐品评爬虫,可以完整爬取整个品评

  部门参考了@平胸小仙女的文章(所在:https://www.zhihu.com/question/36081767)

  post加密部门也给出了,可以参考原帖:

  作者:平胸小仙女

  链接:https://www.zhihu.com/question/36081767/answer/140287795

  泉源:知乎

  '''

  from Crypto.Cipher import AES

  import

  import requests

  import json

  import codecs

  import time

  # 头部信息

  headers= {

  'Host':"music.163.com",

  'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

  'Accept-Encoding':"gzip, deflate",

  'Content-Type':"application/x-www-form-urlencoded",

  'Cookie':"_ntes_nnid=754361b04b121e078dee797cdb30e0fd,1486026808627; _ntes_nuid=754361b04b121e078dee797cdb30e0fd; JSESSIONID-WYYY=yfqt9ofhY%5CIYNkXW71TqY5OtSZyjE%2FoswGgtl4dMv3Oa7%5CQ50T%2FVaee%2FMSsCifHE0TGtRMYhSPpr20i%5CRO%2BO%2B9pbbJnrUvGzkibhNqw3Tlgn%5Coil%2FrW7zFZZWSA3K9gD77MPSVH6fnv5hIT8ms70MNB3CxK5r3ecj3tFMlWFbFOZmGw%5C%3A1490677541180; _iuqxldmzr_=32; vjuids=c8ca7976.15a029d006a.0.51373751e63af8; vjlast=1486102528.1490172479.21; __gads=ID=a9eed5e3cae4d252:T=1486102537:S=ALNI_Mb5XX2vlkjsiU5cIy91-ToUDoFxIw; vinfo_n_f_l_n3=411a2def7f75a62e.1.1.1486349441669.1486349607905.1490173828142; P_INFO=m15527594439@163.com|1489375076|1|study|0099|nullnullnull#hub420100#10#0#0|1554391|study_client|15527594439@163.com; NTES_CMT_USER_INFO=84794134%7Cm155****4439%7Chttps%3A%2F%2Fsimg.ws.126.net%2Fe%2Fimg5.cache.netease.com%2Ftie%2Fimages%2Fyun%2Fphoto_default_62.png.39x39.100.jpg%7Cfalse%7CbTE1NTI3NTk0NDM5QDE2My5jb20%3D; usertrack=c+5+hljHgU0T1FDmA66MAg==; Province=027; City=027; _ga=GA1.2.1549851014.1489469781; __utma=94650624.1549851014.1489469781.1490664577.1490672820.8; __utmc=94650624; __utmz=94650624.1490661822.6.2.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; playerid=81568911; __utmb=94650624.23.10.1490672820",

  'Connection':"keep-alive",

  'Referer':'https://music.163.com/'

  }

  # 配置代理办事器

  proxies= {

  'http:':'https://121.232.146.184',

  'https:':'https://144.255.48.197'

  }

  # offset的取值为:(品评页数-1)*20,total第一页为true,此外页为false

  # first_param = '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}' # 第一个参数

  second_param= "010001"# 第二个参数

  # 第三个参数

  third_param= "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7"

  # 第四个参数

  forth_param= "0CoJUm6Qyw8W8jud"

  # 获取参数

  def get_params(page): # page为传入页数

  iv= "0102030405060708"

  first_key= forth_param

  second_key= 16* 'F'

  if(page== 1): # 如果为第一页

  first_param= '{rid:"", offset:"0", total:"true", limit:"20", csrf_token:""}'

  h_encText= AES_encrypt(first_param,first_key,iv)

  else:

  offset= str((page-1)*20)

  first_param= '{rid:"", offset:"%s", total:"%s", limit:"20", csrf_token:""}'%(offset,'false')

  h_encText= AES_encrypt(first_param,first_key,iv)

  h_encText= AES_encrypt(h_encText,second_key,iv)

  returnh_encText

  # 获取 encSecKey

  def get_encSecKey():

  encSecKey= "257348aecb5e556c066de214e531faadd1c55d814f9be95fd06d6bff9f4c7a41f831f6394d5a3fd2e3881736d94a02ca919d952872e7d0a50ebfa1769a7a62d512f5f1ca21aec60bc3819a9c3ffca5eca9a0dba6d6f7249b06f5965ecfff3695b54e1c28f3f624750ed39e7de08fc8493242e26dbc4484a01c76f739e135637c"

  returnencSecKey

  # 解密过程

  def AES_encrypt(text,key,iv):

  pad= 16- len(text)% 16

  text= text+ pad *chr(pad)

apikey怎么获取_ChatGPT的apikey怎么获取 apikey怎么获取_ChatGPT的apikey怎么获取(api key怎么获取) 搜狗词库

  encryptor= AES.new(key,AES.MODE_CBC,iv)

  encrypt_text= encryptor.encrypt(text)

  encrypt_text= .b64encode(encrypt_text)

  returnencrypt_text

  # 获得品评json数据

  def get_json(url,params,encSecKey):

  data= {

  "params": params,

  "encSecKey": encSecKey

  }

  response= requests.post(url,headers=headers,data=data,proxies= proxies)

  returnresponse.content

  # 抓取热点品评,返回热评列表

  def get_hot_comments(url):

  hot_comments_list= []

  hot_comments_list.append(u"用户ID 用户昵称 用户头像所在 品评时间 点赞总数 品评内容n")

  params= get_params(1)# 第一页

apikey怎么获取_ChatGPT的apikey怎么获取 apikey怎么获取_ChatGPT的apikey怎么获取(api key怎么获取) 搜狗词库

  encSecKey= get_encSecKey()

  json_text= get_json(url,params,encSecKey)

  json_dict= json.loads(json_text)

  hot_comments= json_dict['hotComments']# 热点品评

  print("共有%d条热点品评!"% len(hot_comments))

  foritem inhot_comments:

  comment= item['content']# 品评内容

  likedCount= item['likedCount']# 点赞总数

  comment_time= item['time']# 品评时间(时间戳)

  userID= item['user']['userID']# 品评者id

  nickname= item['user']['nickname']# 昵称

  avatarUrl= item['user']['avatarUrl']# 头像所在

  comment_info= userID+ " "+ nickname+ " "+ avatarUrl+ " "+ comment_time+ " "+ likedCount+ " "+ comment+ u"n"

  hot_comments_list.append(comment_info)

  returnhot_comments_list

  # 抓取某一首歌的所有品评

  def get_all_comments(url):

  all_comments_list= []# 存放所有品评

  all_comments_list.append(u"用户ID 用户昵称 用户头像所在 品评时间 点赞总数 品评内容n")# 头部信息

  params= get_params(1)

  encSecKey= get_encSecKey()

  json_text= get_json(url,params,encSecKey)

  json_dict= json.loads(json_text)

  comments_num= int(json_dict['total'])

  if(comments_num% 20== 0):

  page= comments_num/ 20

  else:

  page= int(comments_num/ 20)+ 1

  print("共有%d页品评!"% page)

  foriinrange(page): # 逐页抓取

  params= get_params(i+1)

  encSecKey= get_encSecKey()

  json_text= get_json(url,params,encSecKey)

  json_dict= json.loads(json_text)

  ifi== 0:

  print("共有%d条品评!"% comments_num)# 所有品评总数

  foritem injson_dict['comments']:

  comment= item['content']# 品评内容

  likedCount= item['likedCount']# 点赞总数

  comment_time= item['time']# 品评时间(时间戳)

  userID= item['user']['userId']# 品评者id

  nickname= item['user']['nickname']# 昵称

  avatarUrl= item['user']['avatarUrl']# 头像所在

  comment_info= unicode(userID)+ u" "+ nickname+ u" "+ avatarUrl+ u" "+ unicode(comment_time)+ u" "+ unicode(likedCount)+ u" "+ comment+ u"n"

  all_comments_list.append(comment_info)

  print("第%d页抓取完毕!"% (i+1))

  returnall_comments_list

  # 将品评写入文本文件

  def save_to_file(list,filename):

  with codecs.open(filename,'a',encoding='utf-8')asf:

  f.writelines(list)

  print("写入文件成功!")

  if__name__== "__main__":

  start_time= time.time()# 最先时间

  url= "https://music.163.com/weapi/v1/resource/comments/R_SO_4_186016/?csrf_token="

  filename= u"晴天.txt"

  all_comments_list= get_all_comments(url)

  save_to_file(all_comments_list,filename)

  end_time= time.time()#结束时间

  print("程序耗时%f秒."% (end_time- start_time))

  我操纵上述代码跑了一下,抓了两首周杰伦的热点歌曲《晴天》(有130多万品评)和《告白气球》(有20多万品评),前者跑了或许有20多分钟,后者有6600多秒(也就是快要2个小时),截图如下:

  

  寄望我是按照空格来分隔的,每一行别离有用户ID 用户昵称 用户头像所在 品评时间 点赞总数 品评内容 这些内容。我将这两个txt文件上传到百度云了,对数据感爱好的同砚可以直接下载进行文本分析,所在为:《晴天》(https://pan.baidu.com/s/1boBglfp),《告白气球》(https://pan.baidu.com/s/1o8O7k1s),或许自己跑一下代码抓取一下也是可以的(寄望不要开太多线程给网易云的办事器太大压力哦~~中间有一段时间办事器返回数据出格慢,不知道是不是限制会见了,后来又好了)。我反面或许会自己去对品评数据进行可视化阐明,敬请等候!

看完本文有劳绩?请转发分享给更多人

关注「Python开发者」,抬举Python技术

Tags: 数据 参数 爬虫 信息 时间 网易 有的 这两个 浏览器 用户 所在 如下图 也是 的话 热点

服务热线

131-1198-7613

功能和特性

价格和优惠

获取内部资料

微信服务号