使用pushplus+python实现亚马逊到货消息推送微信
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实现亚马逊到货消息推送微信的更多相关文章
- 杂_小技巧_将网页上的内容通过亚马逊邮箱传到kindle中
所需条件 1.kindle要联网 2.要有亚马逊邮箱 3.要有微信,电脑上或者手机上 操作步骤: 1.找到你想要传送到kindle上的文章网页 2.在微信中关注“亚马逊kindle服务号”并且按照里边 ...
- python 脚本开发实战-当当亚马逊图书采集器转淘宝数据包
开发环境python2.7.9 os:win-xp exe打包工具pyinstaller 界面tkinter ============================================= ...
- 个性化对待亚马逊不同站点 使用 Python 进行线程编程
# -*- coding: UTF-8 -*- import threading import time exitFlag = 0 class myThread (threading.Thread): ...
- python requests库网页爬取小实例:亚马逊商品页面的爬取
由于直接通过requests.get()方法去爬取网页,它的头部信息的user-agent显示的是python-requests/2.21.0,所以亚马逊网站可能会拒绝访问.所以我们要更改访问的头部信 ...
- python多线程爬虫:亚马逊价格
import re import requests import threading import time from time import ctime,sleep from queue impor ...
- 使用AWS亚马逊云搭建Gmail转发服务(三)
title: 使用AWS亚马逊云搭建Gmail转发服务(三) author:青南 date: 2015-01-02 15:42:22 categories: [Python] tags: [log,G ...
- 使用AWS亚马逊云搭建Gmail转发服务(二)
title: 使用AWS亚马逊云搭建Gmail转发服务(二) author:青南 date: 2014-12-31 14:44:27 categories: [Python] tags: [Pytho ...
- 使用AWS亚马逊云搭建Gmail转发服务(一)
title: 使用AWS亚马逊云搭建Gmail转发服务(一) author:青南 date: 2014-12-30 15:41:35 categories: Python tags: [Gmail,A ...
- 程序员面试大揭秘——应聘微软、亚马逊、谷歌、苹果等IT公司你都要做什么准备?
对于多数求职者而言,面试好似一个迷局.你去了,见了几个面试官,答了一堆问题,然后,或两手空空离开,或幸运地拿到录用通知. 你有没有想过: 面试结果是怎么得出的? 面试官会不会互相交流? 公司最看重哪些 ...
随机推荐
- C#反编译工具ILSpy 反汇编
ILSpy反编译工具之C#反汇编 1.下载ILspy工具 https://github.com/icsharpcode/ILSpy#ilspy------- 注意: ILspy需要在电脑上安装.N ...
- webform中DropdownList绑定多个字段
说明 ListItem中有Attributes属性,手动创建一个自定义属性,赋值需要绑定的字段的值. 这样的话,前台js也可以获取到,能够显示到前台html,进行控制. 代码 foreach(Data ...
- python序列(五)切片操作
功能:截取列表中的任何部分. 切片适用于列表.元组.字符串.range对象等类型.. 格式:[::]切片使用两个冒号分隔的3个数字来完成. 第一个数字表示切片开始位置(默认为0). 第二个数字表示切片 ...
- springboot项目中使用jsp
在pom文件中 1.方法一 <!-- 引入tomcate内嵌的jsp解析包--> <dependency> <groupId>org.apache.tomcat.e ...
- Net Core(Net5) 部署到不同操作系统遇到问题的解决方法
Net Core(Net5) 部署到不同操作系统的解决方法 目录 Net Core(Net5) 部署到不同操作系统的解决方法 1 系统版本升级补丁 1.1应用程序部署时VC无法安装,导致应用程序缺少配 ...
- Qt学习笔记-Qt-4.8.6+phonon+mplayer
首先,用phonon播放音乐时,可以使用mplayer.首先,你的设备上需要安装一个mplayer并测试能用. 然后安装后端播放插件. 我用的是网上找的phonon-mplayer. 按照网上的方法, ...
- web前台界面的两种验证方式
JSON的全称是"JavaScript Object Notation",意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式. 第一种: 用户体 ...
- mysql-font1251错误
控制台中先连接mysql: ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; ALTER US ...
- 使用ThreadLocal
使用ThreadLocal 阅读: 135212 多线程是Java实现多任务的基础,Thread对象代表一个线程,我们可以在代码中调用Thread.currentThread()获取当前线程.例如,打 ...
- python安装库报错的处理方法
在安装python map库时遇到了还多问题,找了好的方法都没有安装成功,最后改安装basemap库参考了了:https://www.jb51.net/article/147780.htm一文操作,最 ...