用pushplus+python监控亚马逊到货动态推送微信


Posted in Python onJanuary 29, 2021

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

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

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

一、pushplus相关介绍

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

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

用pushplus+python监控亚马逊到货动态推送微信

调用该接口可使用如下代码,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页面,可以看到如下界面:

用pushplus+python监控亚马逊到货动态推送微信

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

用pushplus+python监控亚马逊到货动态推送微信

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

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

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

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

我们使用Requests+BeautfifulSoup来抓取<div id = 'availability_feature_div>  </div>这个标签内部的所有html源码

headers = {
   "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",
   'Content-Type': 'application/json'
  }
html = requests.get(url=self.url, headers=headers)
soup = BeautifulSoup(html.text, 'lxml')
html.close()
target = str(soup.find('div', id='availability_feature_div'))

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

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

 四、完整代码

import json
import requests
from bs4 import BeautifulSoup
import filecmp
import time
import threading


class listenThread(threading.Thread):
 def __init__(self, url, originFile, newFile, content):
  threading.Thread.__init__(self)
  self.url = url
  self.originFile = originFile
  self.newFile = newFile
  self.content = content

 def listen(self):
  headers = {
   "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",
   'Content-Type': 'application/json'
  }
  html = requests.get(url=self.url, headers=headers)
  soup = BeautifulSoup(html.text, 'lxml')
  html.close()
  target = str(soup.find('div', id='availability_feature_div'))
  filetxt = open(self.originFile, 'w', encoding='utf-8')
  filetxt.write(target)
  filetxt.close()
  while True:
   target = str(soup.find('div', id='availability_feature_div'))
   filetxt = open(self.newFile, 'w', encoding='utf-8')
   filetxt.write(target)
   filetxt.close()
   if filecmp.cmp(self.originFile, self.newFile) == False:
    post_push('这里输你自己的token', 'xbox update', self.content)
    fileAvail = open(self.originFile, 'w')
    fileAvail.write(target)
    fileAvail.close()
   time.sleep(30)
 def run(self):
  self.listen()


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)


if __name__ == '__main__':
 detect_url = 'https://www.amazon.co.jp/-/en/dp/B08GGKZ34Z/ref=sr_1_2?dchild=1&keywords=xbox&qid=1611674118&sr=8-2'
 #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'
 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'
 xbox = listenThread(url=detect_url,originFile='avail.txt',newFile='avail_now.txt',content='日亚')
 #xbox_sp = listenThread(url=detect_url,originFile='avail_sp.txt',newFile='avail_now_sp.txt')
 xbox_germany = listenThread(url=url_germany,originFile='avail_sp.txt',newFile='avail_now_sp.txt',content='德亚')
 xbox.start()
 #xbox_sp.start()
 xbox_germany.start()

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

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

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

用pushplus+python监控亚马逊到货动态推送微信

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

以上就是用pushplus+python监控亚马逊到货动态推送微信的详细内容,更多关于pushplus+python监控亚马逊到货动态的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
详解Python的迭代器、生成器以及相关的itertools包
Apr 02 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
Python2.X/Python3.X中urllib库区别讲解
Dec 19 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
Feb 18 Python
基于python 爬虫爬到含空格的url的处理方法
May 11 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
May 25 Python
python selenium自动上传有赞单号的操作方法
Jul 05 Python
python设定并获取socket超时时间的方法
Jan 12 Python
解决tensorflow添加ptb库的问题
Feb 10 Python
Python基于爬虫实现全网搜索并下载音乐
Feb 14 Python
python用字节处理文件实例讲解
Apr 13 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 #Python
python热力图实现简单方法
Jan 29 #Python
Ubuntu20.04环境安装tensorflow2的方法步骤
Jan 29 #Python
python3定位并识别图片验证码实现自动登录功能
Jan 29 #Python
python中numpy数组与list相互转换实例方法
Jan 29 #Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 #Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
Jan 29 #Python
You might like
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
php存储过程调用实例代码
2013/02/03 PHP
php中删除、清空session的方式总结
2015/10/09 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
js substr、substring和slice使用说明小记
2011/09/15 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
JavaScript 七大技巧(二)
2015/12/13 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
利用百度echarts实现图表功能简单入门示例【附源码下载】
2019/06/10 Javascript
javascript将扁平的数据转为树形结构的高效率算法
2020/02/27 Javascript
深入分析JavaScript 事件循环(Event Loop)
2020/06/19 Javascript
Javascript执行上下文顺序的深入讲解
2020/11/04 Javascript
JavaScript枚举选择jquery插件代码实例
2020/11/17 jQuery
详解Typescript里的This的使用方法
2021/01/08 Javascript
Python开发实例分享bt种子爬虫程序和种子解析
2014/05/21 Python
分享一个可以生成各种进制格式IP的小工具实例代码
2017/07/28 Python
python实现决策树分类
2018/08/30 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python urlencode和unquote函数使用实例解析
2020/03/31 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
python实现简单的tcp 文件下载
2020/09/16 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
蔻驰法国官网:COACH法国
2018/11/14 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
JPA的优势都有哪些
2013/07/04 面试题
独生子女证明范本
2015/06/19 职场文书
Python中else的三种使用场景
2021/06/16 Python
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers