继上次python请求秀动接口,这次我将采用性能最佳的Go语言重构,(tips:因分享了太多人,有人以此向外获利,所以停止分享)
之前采用python异步请求,三次请求购票接口的思路。鉴于秀动app的防护措施愈来愈强,我将采用发挥go语言的协程的最大功效。
(1)思路1:
![](https://img-blog.csdnimg.cn/img_convert/6d242777f26291ee30b0e75c87ee6d75.png)
通过第一个协程请求第一个api,请求完之后,得到的response通过chan管道到协程并发的second api,与之前不同的是第二个api接口的请求有着多个协程的并发任务,一旦第二个协程得到这个任务,立马执行,执行完之后,通过chan2管道传到第三个api接口中的并发任务。这样就避免了I/O堵塞的问题。
但是在第二个接口如何知道第一个接口已经执行完,第二个接口已经执行完返回的response能够在短时间内被利用呢?毫无疑问,设置监控器。这里就用到了chatgpt给我的回复:
![](https://img-blog.csdnimg.cn/img_convert/1f3181890ccf47d106862db7a1df3ee2.png)
chatgpt提供的办法是通过select的方法,进行实时的监控第一个协程是否已经执行完,已经有数据到了管道,因此用到这个方法,我们可以进行实战,其也是可以进行的,但是其会出现资源的损耗,在堵塞过程中,其进行的是条件的筛选。
因此进行第二个思路的思考。
(2)思路二:因为无限个协程并发始终会造成资源消耗和死锁的情况。
因此我们需要控制协程的并发数:
![](https://img-blog.csdnimg.cn/img_convert/1b736f9e0edc5f746f744212f1e086a8.png)
统计协程的个数,最终控制并发量,达到一种程序的效率的最大值,测试得到在协程数控制在20时,我们的系统资源会被完全利用,并且并发的出现的堵塞情况也会减少。
![](https://img-blog.csdnimg.cn/img_convert/32e986c4e834f1447f2c51e2a5ef645a.png)
于是基于此,我将采用该方式进行代码的编写。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(1)因为go语言需要包的支撑,按照go语言的规范,第一步数据模型定义
![](https://img-blog.csdnimg.cn/img_convert/38ecc4a5fcd3a4d5534eced2bc57ed8d.png)
(2)爬虫当然少不了代理
![](https://img-blog.csdnimg.cn/img_convert/6f9355e34a4d8231c6131c9db75ba69a.png)
(3)直接请求三大接口
![](https://img-blog.csdnimg.cn/img_convert/37189fbd9dd104d0a8b91fe4d1c85380.png)
(4)展示数据模型:
![](https://img-blog.csdnimg.cn/img_convert/bff1f6d2becd08ddfb512a1183e7cc38.png)
![](https://img-blog.csdnimg.cn/img_convert/1ef60c260bcc76bbc346b53a5037af8f.png)
因为在我的上一个文章中已经讲了如何去请求接口及相关方法,这里就不再重复,仅提供用go语言实现最大的效率请求接口的方式。
拿最近的《城市客厅》南京场次做测试:
![](https://img-blog.csdnimg.cn/img_convert/a42b7eb0946e23360aa9b7bb14b4ca5e.png)
可以看到能够稳定拿下。返回的数据为:
![](https://img-blog.csdnimg.cn/img_convert/e04f435f8b97d4d7269151729a1e0f0d.jpeg)
好了,大功告成。
有任何问题可联系我,(以上代码及分析均为本人原创)