python伪造签名爬取抢购页面提醒功能

每天都蹲在某某抢饭平台,通过试吃省吃俭用,但是有些好吃的神出鬼没,经常每天抱着手机刷新希望得到一些好吃的东东,为此制作了一个python爬虫程序,通过手动筛选条件,通过公众号以及阿里云短信服务进行通知,满足我的需求,通知到位马上上号!!!

通过访问网页版点击F12查看网页请求数据的过程,查看是否是前后端分离项目,前后端分离项目的好处是可以直接得到获取数据的url。

通过筛选可以得到商品数据是通过POST请求向目标服务器请求数据,根据浏览器访问的POST请求参数制作request请求。

该服务器校验头部信息,所以需要加上headers进行访问。

headers = {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate, br",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "Caller": "WEB",
    "Connection": "keep-alive",
    "Content-Type": "application/json;charset=UTF-8",
    "Sec-Ch-Ua": "\"Microsoft Edge\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"",
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": "\"Windows\"",
    "Sec-Fetch-Dest": "empty",
    "Sec-Fetch-Mode": "cors",
    "Sec-Fetch-Site": "same-site",
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Mobile Safari/537.36"
}

# 构造 POST 请求的参数
payload = {
    "brandId":
    "lastId": ,
    "latitude": ,
    "longitude": ,
    "pageSize":
}

# 发送 POST 请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

通过测试发现服务器返回500错误。

通过校验头部信息发现,该网站需要在头信息中添加Sign签名进行校验,但是该网站却是不需要登录即可访问进行查询数据,所以该网站一定是通过用户计算机生成某种校验签名,并且无法进行服务器校验,必须按照某种规则进行生成。通过检查访问网页传输的js代码块,筛选Sign查询出生成Sign签名的代码块。

最终发现是通过传输时间戳加上写死的校验生成MD5作为Sign签名,所以通过md5加密该数据进行访问发现返回200状态码,访问成功,至此python爬虫到此实现完毕,一般需要登录的网页会通过登陆后颁发token,用户通过携带token给服务器进行解析后辨别身份,面对这个类型的数据爬取显得异常艰难。然而不用登录的页面数据爬取最多的校验方式则是通过代码内嵌验证模块减少爬虫的访问。

有个问题就是每分钟刷新,有些商品会一直出现,相同的商品如何只提醒一次,在这我使用了redis进行存储,每次查询符合要求的商品存入redis,在每次查询之后查询redis是否以及拥有,没有则添加进redis,发送通知,再另外写一个程序通过schedule库进行定时清空redis库。

# 连接到 Redis
r = redis.StrictRedis(host='', port=6379, db=0,password='123456')
# 定义清空 Redis 数据的函数
def clear_redis():
    r.flushdb()
    print("Redis data cleared")
# 使用 schedule 库,每天执行清空 Redis 操作
schedule.every().day.at("08:00").do(clear_redis)
# 循环执行
while True:
    schedule.run_pending()
    time.sleep(30)  # 每隔#秒检查一次

下一步则是筛选合适数据并且通过各种途径的通知方式通知客户了,在这我选择了阿里云的云服务短信业务以及通过微信公众号进行消息传达。

使用的是Wxpusher消息推送平台,完全免费。也是通过简单的post请求即可轻松发送,效果如下:

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值