很多朋友对于哪里能买到网站源码分享的书和哪里可以购买网站源码不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
目标站点有声小说-有声读物-电台广播在线听书-蜻蜓FM
python爬虫实战搞的是PC端,移动端可能有更加方便的接口,欢迎大家留意讨论反正是练手就随便抓一下pc端的包好了
主要内容
1.post请求登录2.hmacMD5算法的简单使用
这个例子的登录非常简单没有任何加密直接post就行真的是一点加密和未知参数都没有
私信小编01即可获取大量Python学习资源
?
python实现,注意此处是类的一个方法不完整无法直接运行
deflogin(self,user_id,password):\ndata={\n&39;:&39;,\n&39;:&39;,\n&39;:user_id,\n&39;:password\n}\nresponse=self.session.post(self.login_url,data=data)\nifresponse.status_code==200:\ntemp=response.json()\nerrorno=temp[&39;]\nerrormsg=temp[&39;]\niferrorno==0:\nprint(&39;,&39;)\ndata=temp[&39;]\nself.qingting_id=data[&39;]\nself.access_token=data[&39;]\n\nelse:\nprint(&39;,&39;)\nprint(errormsg)
录成功后我们把access_token和qingting_id拿到,相当于一个登录后的标志如果账号是会员相当于一个会员标志音频的真实地址请求了这样一个url:
https://audio.qingting.fm/audiostream/redirect/294280/11604885
其中294280是专辑id,11604885是当前音频的id
?
其中还带了一些参数比如access_token,qingting_id(登录成功的response中有,上图没有登录所有是空的),另外还有一些比如t是时间戳,
device_id=MOBILESITE(不变)
关键就在于sign(尝试过不加sign会返回一个签名错误)
可以通过全局搜索试一下是哪个js生成的这个sign我全局搜索了一下
device_id
在mian.一大堆.js找到了生成sign的函数(需要自己分辨一下是一个device_id:&34;的)
搜索其他关键字应该也是可以顺利找到的
?
这里的sign是u这个变量它是由c这个变量通过一堆加密处理得到的
我们可以控制台输出一下u和c
?
所以我们就知道了sign实际是加密了请求的其他参数
一开始我误以为是单纯的MD5所以卡了好久(还进入函数内部看他具体是怎么实现的看的一头雾水)
其实代码已经告诉用的是
createHmac(&34;,&34;)
查了下Hmac发现就是一种现成的算法,还有不同的模式MD5是其中一种,需要一个秘钥
这里什么都告诉你了,用Hmac-md5秘钥是fpMn12&38f_2e
找个在线加密的网站试了下,果然和刚才控制台输出的一样
?
python的话需要import
hmac这个库
importhmac\nimporttime\n\nbase_url=&34;\nbookid=&34;\nid=&34;\naccess_token=&34;\nqingting_id=&34;\ntimestamp=str(round(time.time()*1000))\ndata=f&34;\nmessage=data.encode(&39;)\nkey=&34;.encode(&39;)\nsign=hmac.new(key,message,digestmod=&39;).hexdigest()\nwhole_url=base_url+data+&34;+sign\nprint(whole_url)
得到一个音频可以做到了剩下的就是得到一堆了,其实我们得到每个音频的id就可以了我请求的是这个接口
info_api=&39;
version在声书主页的源代码中,只要改curpage就可以翻页了完整源码
importrequests\nimportre\nimporthmac\nimporttime\nfromtqdmimporttqdm\nfrombs4importBeautifulSoup\nimportos\nimportjson\nimportsys\nimporturllib3\nurllib3.disable_warnings()\n\nclassQingTing():\ndef__init__(self,user_id,password,bookurl,ifLogin):\nself.ifLogin=ifLogin\nself.user_id=user_id\nself.password=password\nself.session=requests.session()\nself.session.headers.update({&39;:&39;})\nself.login_url=&34;\nself.qingting_id=&39;\nself.access_token=&39;\nself.bookurl=bookurl\n39;https://www.qingting.fm/channels/257790&39;/&39;&39;https://audio.qingting.fm&39;&39;&39;account_type&39;5&39;device_id&39;web&39;user_id&39;password&39;errorno&39;errormsg&39;loginsuccessful!&39;登录成功!&39;data&39;qingting_id&39;access_token&39;Loginfailed&39;登录失败&39;lxml&39;div.album-info-root>div.top>div.info.right>h1&39;[\\\\\\/:\\*\\?\\&39;\nself.bookname=re.sub(replaced_pattern,&39;,temp_bookname,flags=re.M+re.S)\nifnotos.path.exists(self.bookname):\nos.makedirs(self.bookname)\nmatched=re.search(&34;version\\&34;(\\w+)&39;,response.text,re.S)\nifmatched:\nversion=matched.group(1)\nself.version=version\n39;https://i.qingting.fm/capi/channel/{self.bookid}/programs/{self.version}?curpage={str(page)}&pagesize=30&order=asc&39;data&39;total&39;共{}集&39;https://i.qingting.fm/capi/channel/{self.bookid}/programs/{self.version}?curpage={str(page)}&pagesize=30&order=asc&39;data&39;programs&print(program[&39;],program[&39;])\nyieldprogram\n\ndefget_src(self,id):\nbookid=self.bookid\naccess_token=self.access_token\nqingting_id=self.qingting_id\ntimestamp=str(round(time.time()*1000))\ndata=f&34;\nmessage=data.encode(&39;)\nkey=&34;.encode(&39;)\nsign=hmac.new(key,message,digestmod=&39;).hexdigest()\nwhole_url=self.qingtinghost+data+&34;+sign\nreturnwhole_url\n\ndefdownloadFILE(self,url,name):\nresp=self.session.get(url=url,stream=True,verify=False)\nifresp.headers[&39;]==&39;:\ncontent_size=int(int(resp.headers[&39;])/1024)\nwithopen(name,&34;)asf:\nprint(&34;,content_size,&39;)\nfordataintqdm(iterable=resp.iter_content(1024),total=content_size,unit=&39;,desc=name):\nf.write(data)\nprint(name,&34;)\nelse:\nerrorno=resp.json()[&39;]\nerrormsg=resp.json()[&39;]\nprint(&39;)\nprint(&39;,errorno,errormsg)\n\n\n\n\ndefrun(self):\nifself.ifLogin:\nself.login(self.user_id,self.password)\nprograms=self.get_book_info()\ncount=0\nforprograminprograms:\ncount+=1\ntry:\nid=program[&39;]\ntitle=str(count).zfill(4)+&39;+program[&39;]+&39;\nifnotself.bookname==&39;:\ntitle=os.path.join(self.bookname,title)\nwhole_url=self.get_src(id)\nself.downloadFILE(whole_url,title)\nexceptExceptionase:\nprint(e)\nwithopen(&39;,&39;,encoding=&39;)asf:\nf.write(str(count)+str(e)+&39;)\n\ndefget_config_info():\nwithopen(&39;,&39;,encoding=&39;)asf:\nconfig=json.loads(f.read())\nreturnconfig\n\nif__name__==&34;:\n34;ifLogin&39;请输入要下载音频的主页链接:(如[url=https://www.qingting.fm/channels/257790]https://www.qingting.fm/channels/257790[/url])&39;https://www.qingting.fm/channels/\\d+&34;user_id&34;password&34;输入的主页格式错误&不登录\nbookurl=input(&39;)\nisvalid=re.search(&39;,bookurl)\nifisvalid:\nq=QingTing(config[&34;],config[&34;],bookurl,0)\nq.run()\nelse:\nprint(&34;)
配置文件部分
{\n&34;:1,\n\n&34;:&34;,\n\n&34;:&34;\n}
关于哪里能买到网站源码分享的书,哪里可以购买网站源码的介绍到此结束,希望对大家有所帮助。
