xbox series和ps5发售以来,国内黄牛价格一直居高不下。虽然海外amazon上ps5补货很少而且基本撑不过一分钟,但是xbox series系列明显要好抢很多。

日亚、德亚的xbox series x/s都可以直邮中国大陆,所以我们只需要借助脚本,监控相关网页的动态,在补货的第一时刻通过微信告知我们,然后迅速人工购买即可!

需求:pushplus(需要微信关注公众号)、python3

一、pushplus相关介绍

pushplus提供了免费的微信消息推送api,具体内容可以参考他的官网:pushplus(推送加)微信推送消息直达 (hxtrip.com)

我们需要用到的东西有,登陆后的个人Token(用于精准推送消息),如图:

调用该接口可使用如下代码,token为上面提到的你个人的token,titile对应推送标题,content对应推送内容,此代码借鉴了官方demo

def post_push(token, title, content):
url = 'http://pushplus.hxtrip.com/send'
data = {
"token": token,
"title": title,
"content": content
}
body = json.dumps(data).encode(encoding='utf-8')
headers = {'Content-Type': 'application/json'}
requests.post(url, data=body, headers=headers)

二、整体思路

不出意外的话,你在编写代码时,amazon应该处于无货状态(有货直接就买了啊喂)!!!我们在此时打开amazon页面,可以看到如下界面:

在新版Edge浏览器或者chrome下,按F12查看网页源码,选定中间Currently unavailable标识的区域(五颗星下面那个,最好覆盖范围大一点),能看到代码如下:

有一个比较简单的办法,判断amazon是否有补货。我们可以抓取这一部分的html源码,存进一个文件里(txt即可)。每过一定时间,重新抓取源码,如果这些源码变化了,那么基本上是网站更新了(补货了)。不过有个小瑕疵,这种补货也可能是亚马逊第三方(黄牛)补货-  -

不过总归是有了一个判断上新的方法嘛;其实黄牛补货很少的,德亚上好像看不到黄牛(我个人没见过德亚上的第三方卖xsx的),日亚上基本没有啥黄牛卖xbox

好了,接下来,我们看看如何实现相关功能

三、Requests+BeautifulSoup获取相关html源码

1 headers = {
2 "User-Agent": "Mozilla/5.0 (Linux; Android 9; SM-A102U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
3 'Content-Type': 'application/json'
4 }
5 html = requests.get(url=self.url, headers=headers)
6 soup = BeautifulSoup(html.text, 'lxml')
7 html.close()
8 target = str(soup.find('div', id='availability_feature_div'))

注意如果不加headers的话,amazon会检测到爬虫,不会给你返回完整html代码。第7行把requests给close掉是因为,我在监测时开了两个线程同时检测日亚和德亚,如果不加这一句的话,会被amazon认为是我在攻击网站,会拒绝我的网络访问

最终的target是被转为str格式的相应html源码,接下来只需要将其保存到文件,每隔一定时间再次爬虫比对就行了

四、完整代码

 1 import json
2 import requests
3 from bs4 import BeautifulSoup
4 import filecmp
5 import time
6 import threading
7
8
9 class listenThread(threading.Thread):
10 def __init__(self, url, originFile, newFile, content):
11 threading.Thread.__init__(self)
12 self.url = url
13 self.originFile = originFile
14 self.newFile = newFile
15 self.content = content
16
17 def listen(self):
18 headers = {
19 "User-Agent": "Mozilla/5.0 (Linux; Android 9; SM-A102U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.93 Mobile Safari/537.36",
20 'Content-Type': 'application/json'
21 }
22 html = requests.get(url=self.url, headers=headers)
23 soup = BeautifulSoup(html.text, 'lxml')
24 html.close()
25 target = str(soup.find('div', id='availability_feature_div'))
26 filetxt = open(self.originFile, 'w', encoding='utf-8')
27 filetxt.write(target)
28 filetxt.close()
29 while True:
30 target = str(soup.find('div', id='availability_feature_div'))
31 filetxt = open(self.newFile, 'w', encoding='utf-8')
32 filetxt.write(target)
33 filetxt.close()
34 if filecmp.cmp(self.originFile, self.newFile) == False:
35 post_push('这里输你自己的token', 'xbox update', self.content)
36 fileAvail = open(self.originFile, 'w')
37 fileAvail.write(target)
38 fileAvail.close()
39 time.sleep(30)
40 def run(self):
41 self.listen()
42
43
44 def post_push(token, title, content):
45 url = 'http://pushplus.hxtrip.com/send'
46 data = {
47 "token": token,
48 "title": title,
49 "content": content
50 }
51 body = json.dumps(data).encode(encoding='utf-8')
52 headers = {'Content-Type': 'application/json'}
53 requests.post(url, data=body, headers=headers)
54
55
56 if __name__ == '__main__':
57 detect_url = 'https://www.amazon.co.jp/-/en/dp/B08GGKZ34Z/ref=sr_1_2?dchild=1&keywords=xbox&qid=1611674118&sr=8-2'
58 #url_special = 'https://www.amazon.co.jp/-/en/dp/B08GG17K5G/ref=sr_1_6?dchild=1&keywords=xbox%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BAx&qid=1611722050&sr=8-6'
59 url_germany = 'https://www.amazon.de/Microsoft-RRT-00009-Xbox-Series-1TB/dp/B08H93ZRLL/ref=sr_1_2?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=xbox&qid=1611742161&sr=8-2'
60 xbox = listenThread(url=detect_url,originFile='avail.txt',newFile='avail_now.txt',content='日亚')
61 #xbox_sp = listenThread(url=detect_url,originFile='avail_sp.txt',newFile='avail_now_sp.txt')
62 xbox_germany = listenThread(url=url_germany,originFile='avail_sp.txt',newFile='avail_now_sp.txt',content='德亚')
63 xbox.start()
64 #xbox_sp.start()
65 xbox_germany.start()

本代码开了两个线程分别监控日亚和德亚的xsx,detect_url是日亚链接,url_germany是德亚链接;

注意:德亚能够直接上,日亚如果你上不去自己想办法(不能说的东西,你懂的)

里面OriginFile和NewFile的文件名可以随意命名,OriginFile指的是之前爬虫的html,NewFile是新的爬虫html,如果内容不一样,就会收到微信消息推送啦

      这个图只是测试用的,这个时刻日亚也没有真的补货哈哈哈

现在是2021.1.27 XSX和PS5都还处于需要抢的阶段,祝大家尽早进入次世代哦

使用pushplus+python实现亚马逊到货消息推送微信的更多相关文章

  1. 杂_小技巧_将网页上的内容通过亚马逊邮箱传到kindle中

    所需条件 1.kindle要联网 2.要有亚马逊邮箱 3.要有微信,电脑上或者手机上 操作步骤: 1.找到你想要传送到kindle上的文章网页 2.在微信中关注“亚马逊kindle服务号”并且按照里边 ...

  2. python 脚本开发实战-当当亚马逊图书采集器转淘宝数据包

    开发环境python2.7.9 os:win-xp exe打包工具pyinstaller 界面tkinter ============================================= ...

  3. 个性化对待亚马逊不同站点 使用 Python 进行线程编程

    # -*- coding: UTF-8 -*- import threading import time exitFlag = 0 class myThread (threading.Thread): ...

  4. python requests库网页爬取小实例:亚马逊商品页面的爬取

    由于直接通过requests.get()方法去爬取网页,它的头部信息的user-agent显示的是python-requests/2.21.0,所以亚马逊网站可能会拒绝访问.所以我们要更改访问的头部信 ...

  5. python多线程爬虫:亚马逊价格

    import re import requests import threading import time from time import ctime,sleep from queue impor ...

  6. 使用AWS亚马逊云搭建Gmail转发服务(三)

    title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...

  7. 使用AWS亚马逊云搭建Gmail转发服务(二)

    title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...

  8. 使用AWS亚马逊云搭建Gmail转发服务(一)

    title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...

  9. 程序员面试大揭秘——应聘微软、亚马逊、谷歌、苹果等IT公司你都要做什么准备?

    对于多数求职者而言,面试好似一个迷局.你去了,见了几个面试官,答了一堆问题,然后,或两手空空离开,或幸运地拿到录用通知. 你有没有想过: 面试结果是怎么得出的? 面试官会不会互相交流? 公司最看重哪些 ...

随机推荐

  1. 【electron-playground系列】打包优化之路

    作者:梁棒棒 简介 electron打包工具有两个:electron-builder,electron-packager,官方还提到electron-forge,其实它不是一个打包工具,而是一个类似于 ...

  2. Swift3.0学习之基础部分

    1.常量和变量 常量和变量把一个名字(比如 maximumNumberOfLoginAttempts 或者 welcomeMessage )和一个指定类型的值(比如数字 10 或者字符串 " ...

  3. MethodHandleVS反射

    Method Handle与反射 如无特殊说明,本文所有代码均基于JDK1.8.0_221 Method Handle入门 反射我们都知道,为我们提供了运行时对类的成员方法访问的手段,极大地提高了Ja ...

  4. 安装Yii2框架

    一.Windows安装Yii2 1.安装Composer Composer 需要 PHP 5.3.2+ 以上版本,且需要开启 openssl,打开 php 目录下的 php.ini,将 extensi ...

  5. 解决 Idea 下 Lombok 无法使用

    解决:    第一步,项目导入 Lombok 依赖 <dependency> <groupId>org.projectlombok</groupId> <ar ...

  6. “开源、共享、创新” 2020 中国.NET开发者大会小结

    大会的新闻稿在2020年12月31日正式发布:开源·共享·创新|2020年中国.NET开发者大会圆满收官! , 本文是这篇新闻的补充性文章,仅代表个人对大会的各方面分享内容的一个小结. 在2019年上 ...

  7. SpringBoot整合Shiro权限框架实战

    什么是ACL和RBAC ACL Access Control list:访问控制列表 优点:简单易用,开发便捷 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理 例子:常见的文件系 ...

  8. Vue概述

    Vue.js是一套构建用户界面的渐进式框架,采用自底向上增量开发的设计.Vue的核心库关注于视图(html),不仅易上手,还便于与第三方库或项目整合. 渐进式:一步一步,不是将所有的东西都学完才能使用 ...

  9. Windows server 安装远程桌面及破解120天时间限制授权

    一.问题描述 Windows Server系列服务器默认远程桌面连接数是2个用户(本文适用于所有Windows Server系列服务器),如果多余两个用户进行远程桌面连接时,系统就会提示超过连接数,可 ...

  10. linux串口通信 接收信息不完整 读取不全

    类似这种 ready.o是我用来读取串口信息的一个程序 执行结果如下: [root@localhost testPlc]# ./ready.o 0 02 1 30 2 30 3 46 4 46 5 3 ...