用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

虽然每年iPhone发布会过后总有大片人吐槽,但是从销量上来看还是“真香党”居多。今年也不例外,虽然背面三摄的造型受到广泛吐槽,但是暗夜绿色的11 Pro和11 Pro Max一直处于缺货溢价状态,如果你现在去官网预订要一个月后才能发货了,想尽早拿到手,又不想支付溢价怎么办呢,还有一种办法就是在官网预约零售店取货。

用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上
但是官网零售店预约除了每天早上6点放号以外也会在白天不定期放出少量的号,不想每次都打开网页来刷新看号源怎么办?下面教大家用简单的Python来实现网页数据的分析获取并把结果推送到微信上~

首先我们要对网页进行基本的分析,判断这些数据究竟是直接后端渲染到网页的还是通过restful接口获取的,对于前者我们需要使用例如BeautifulSoup的工具在html上获取信息,而后者我们只需要使用requests就能得到我们想要的结果。

使用Chrome打开网页,按F12进入开发者工具,我们选择Network后再次刷新网页,可以看到下图的结果。
用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

在数据里我们发现两个json文件,available.json和stores.json,从文件名上来看我们就能判断一个是有货情况,另一个是跟零售店相关的信息。我们点击他们查看具体信息。

用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上
用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

果然跟我们所想的一致。并且可以看出来在available.json中stores里使用的是storeNumber作为key,在stores.json中则是全部零售店的信息,包括城市、店名、编号、经纬度信息。那么我们需要区分的就剩下型号信息了,因为在available.json中各个型号使用的是型号编码,例如我们想要抢购iphone 11 Pro的暗夜绿色256G版本,恰好笔者手中有一台该型号,在手机附带说明书的产品标签里该型号的型号编码是MWDH2CH/A,那么我们就能得到指定店铺指定型号的缺货情况了~

代码实现使用python的requests库,获取available.json和stores.json,这里需要注意的是我们需要从浏览器里获取本机的cookie,并且需要给get请求添加headers。
用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

获取了信息之后我们想要及时得到消息怎么办呢,这里使用wxpy,及时地把消息通过微信发送到手机上。
用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

最后我们简单地写一个定时器,每五秒查询一次信息,如果有货就把我们关注的店铺缺货情况发到微信上。

用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

经过一个小时测试,我发现在下午一点半左右三里屯零售店会放一批预约号~

用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上
用Requests和wxpy爬取AppleStore零售店预约号并推送到微信上

作为一个爬虫菜鸟,我只能说用这样原始的手段来完成一定程度上的自动化网页数据爬取和消息推送对我们的日常生活还是有一定便利性的~ 感兴趣的可以学习一下相关的知识~

本文全部代码都已经上传至github:

https://github.com/YuhwaChoong/AppleStoreStatus/tree/master