平Fan_d世界 发表于 2023-9-4 19:54

爬取喜加一游戏,Github+PUSHPLUS,每日推送到微信

本帖最后由 平Fan_d世界 于 2023-9-16 15:39 编辑

2023-9-15更新:
1、更新修改Server酱->PUSHPLUS,感谢@hxy310。
2、修正无游戏+1时的错误。
3、修改一些错误代码。

1、爬取喜加一,地址:https://steamstats.cn/xi使用了BeautifulSoup库,使用pip安装,代码>> pip install beautifulsoup4
import requests
from bs4 import BeautifulSoup

##Server酱更改为PUSHPLUS,此段代码注释了###Server酱推送模块,PUSH_KEY替换自己的
#def send_message_fangtang(_item,_message):
#      PUSH_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'#
#      api = 'https://sctapi.ftqq.com/' + PUSH_KEY + '.send'
#      _d = {
#                "title": _item,
#                "desp": _message
#                }
#       req = requests.post(api,data = _d)
#       #print(req.text)

#PushPlus推送模块
def pushplus(_item, _message):
    token = sys.argv    #隐藏token码,参考楼下代码
    api = 'http://www.pushplus.plus/send'
    _d = {
      "token": token,
      "title": _item,
      "content": _message
    }
    req = requests.post(api, data=_d)
    #print(req.text)

#爬取代码
url='https://steamstats.cn/xi'
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.41'}

r=requests.get(url,headers=headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, "html.parser")
tbody=soup.find('tbody')
desp="🎉当前可领限时免费游戏🎉"+'\n'
#print(tbody)
if tbody is not None:
    tr=tbody.find_all('tr')
    i=1
    for tr in tr:
      td=tr.find_all('td')
      name=td.string.strip().replace('\n', '').replace('\r', '')
      gametype=td.string.replace(" ","").replace('\n', '').replace('\r', '')
      start=td.string.replace(" ","").replace('\n', '').replace('\r', '')
      end=td.string.replace(" ","").replace('\n', '').replace('\r', '')
      time=td.string.replace(" ","").replace('\n', '').replace('\r', '')
      oringin=td.find('span').string.replace(" ","").replace('\n', '').replace('\r', '')
      sp=str(td).split('"')
      http=sp
      
      desp=desp+"序号:"+str(i)+'\n'+"游戏名称:"+name+'\n'+"类型:"+gametype+'\n'+"开始时间:"+start+'\n'+"结束时间:"+end+'\n'+"是否永久:"+time+'\n'+"平台:"+oringin+'\n'+"链接:"+http+'\n'
      i=i+1
    else:
      desp=desp+"无"
#send_message_fangtang("今日喜加一",desp)
pushplus("✨今日喜加一✨",desp)
#print(desp)      


2、Github Ations,new workflows新建main.yml
name: happy plus one

on:
push:
    branches:
      - main
schedule:   
    - cron:23 23 * * *   #国际标准时间,北京时间+8

jobs:
my_job:
    runs-on: ubuntu-latest
    steps:
      - name: 'checkout codes'
      uses: actions/checkout@v2
      - name: 'set up python'
      uses: actions/setup-python@v2
      with:
         python-version: ${{ matrix.python-version }}
      - name: requirements
      run: |
         python -m pip install --upgrade pip
         pip install beautifulsoup4
      - name: 'Epic/steam happy +1'
         run: |
          python ${{ github.workspace }}/happy_plus_one.py ${{ secrets.PUSHPLUS_TOKEN }}#你的PUSHPLUS TOKEN



3、储存库-Settings-Secrets and variables-Actions-New repository secret Name填入你的TOKEN

复制第一步的happy_plus_one.py文件到Github,大功告成!执行没问题的!
https://i2.100024.xyz/2023/09/04/was9ug.webp
效果差不多是这样,还有个链接地址是后改的,今天的推送次数到了,没有在图片上。

https://i2.100024.xyz/2023/09/04/w8gtss.webp
PUSHPLUS后的效果是这样的!

https://i2.100024.xyz/2023/09/15/fm33w2.webp

https://i2.100024.xyz/2023/09/15/fm332e.webp

hxy310 发表于 2023-9-5 00:54

本帖最后由 hxy310 于 2023-9-5 01:05 编辑

根据楼主的代码,我改良了一下,将token放入了Actions secrets and variables,这样不会暴露token,防止有人利用token推送垃圾信息,并且我将Server酱换成了pushplus,大家可以选择性使用。
需要打开你的储存库-Settings-Secrets and variables-Actions-New repository secret Name填TOKEN,底下的值就将你的推送秘钥粘贴进去就行了。

name: Happy_Plus_One
on:
workflow_dispatch:

schedule:
   - cron:0 1 * * *   #国际标准时间,北京时间+8
jobs:
my_job:
    runs-on: ubuntu-latest
    steps:
      - name: 'checkout codes'#检测代码
      uses: actions/checkout@v2
      - name: 'set up python'#配置python
      uses: actions/setup-python@v2
      with:
         python-version: ${{ matrix.python-version }}
      - name: requirements#配置库
      run: |
         python -m pip install --upgrade pip
         pip install beautifulsoup4
      - name: 'Epic/steam happy +1'#运行py
      run: |
          python happy_plus_one.py ${{ secrets.TOKEN }}

import sys
import requests
from bs4 import BeautifulSoup

# PushPlus推送模块
def pushplus(_item, _message):
    token = sys.argv
    api = 'http://www.pushplus.plus/send'
    _d = {
      "token": token,
      "title": _item,
      "content": _message
    }
    req = requests.post(api, data=_d)
    print(req.text)

# 爬取代码
url = 'https://steamstats.cn/xi'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.41'}

r = requests.get(url, headers=headers)
r.raise_for_status()
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, "html.parser")
tbody = soup.find('tbody')
tr = tbody.find_all('tr')
i = 1

for tr in tr:
    td = tr.find_all('td')
    name = td.string.strip().replace('\n', '').replace('\r', '')
    gametype = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
    start = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
    end = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
    time = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
    origin = td.find('span').string.replace(" ", "").replace('\n', '').replace('\r', '')

    sp = str(td).split('"')
    http = sp
    desp = "序号:" + str(i) + '\n\r' + "游戏名称:" + name + '\n\r' + "类型:" + gametype + '\n\r' + "开始时间:" + start + '\n\r' + "结束时间:" + end + '\n\r' + "是否永久:" + time + '\n\r' + "平台:" + origin + '\n\r' + "链接:" + http + '\n\r'

    # 推送
    pushplus("今日喜加一", desp)
    print(desp)

如果想使用Server酱,将我第二段的代码第1到第15行替换即可。
import sys
import requests
from bs4 import BeautifulSoup
#Server酱推送模块,PUSH_KEY替换自己的
def send_message_fangtang(_item,_message):
      token = sys.argv
      api = 'https://sctapi.ftqq.com/' + token + '.send'
      _d = {
                "title": _item,
                "desp": _message
                }
      req = requests.post(api,data = _d)
      #print(req.text)




shuai2051 发表于 2023-9-7 10:00

适配青龙面板,需要在脚本同目录存在notify.py文件,且在配置文件设置过相应推送变量,效果如下图
# -*- coding: utf-8 -*-
"""
cron: 48 7 * * *
new Env('epic 今日喜加一');
"""
import time
import re
import requests
import logging
import random
import os
import sys
from os import environ, system, path
from bs4 import BeautifulSoup

# 加载通知
def load_send() -> None:
    logging.info("加载推送功能中...")
    global send
    send = None
    cur_path = os.path.abspath(os.path.dirname(__file__))
    sys.path.append(cur_path)
    if os.path.exists(cur_path + "/notify.py"):
      try:
            from notify import send
      except Exception:
            send = None
            logging.info(f"❌加载通知服务失败!!!\n{traceback.format_exc()}")
    else:
      logging.info(f"❌加载通知服务失败!!!\n")
# 爬取代码
def main():
    url = 'https://steamstats.cn/xi'
    headers = {
      'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.41'}

    r = requests.get(url, headers=headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    soup = BeautifulSoup(r.text, "html.parser")
    tbody = soup.find('tbody')
    tr = tbody.find_all('tr')
    i = 1
    # desp="今日喜加一"+'\n'
    for tr in tr:
      td = tr.find_all('td')
      name = td.string.strip().replace('\n', '').replace('\r', '')
      gametype = td.string.replace(
            " ", "").replace('\n', '').replace('\r', '')
      start = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
      end = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
      time = td.string.replace(" ", "").replace('\n', '').replace('\r', '')
      oringin = td.find('span').string.replace(
            " ", "").replace('\n', '').replace('\r', '')

      sp = str(td).split('"')
      http = sp
      res = "序号:"+str(i)+'\n\r'+"游戏名称:"+name+'\n\r'+"类型:"+gametype+'\n\r'+"开始时间:"+start + \
            '\n\r'+"结束时间:"+end+'\n\r'+"是否永久:"+time+'\n\r' + \
            "平台:"+oringin+'\n\r'+"链接:"+http+'\n\r'
    # print(res)
    result = f"{res}"
    send('今日喜加一', result)

if __name__ == "__main__":
   # 加载通知
    load_send()
    time.sleep(random.randint(5, 10))
    main()


LeslieLau 发表于 2023-9-4 21:45

有个APP小黑盒,上面有领取功能

罩到胸前必有沟 发表于 2023-9-4 19:58

很厉害!

fscc无误 发表于 2023-9-4 20:01

这是什么????

GodRui2023 发表于 2023-9-4 20:45

萌新看得一脸懵{:1_923:} 待我多看几遍{:1_893:}

moruye 发表于 2023-9-4 21:11

AaronZero 发表于 2023-9-4 22:12

可以,这个牛

雾都孤尔 发表于 2023-9-4 23:39

学习下,感谢分享。

一条小渣团OvO 发表于 2023-9-5 06:58

LeslieLau 发表于 2023-9-4 21:45
有个APP小黑盒,上面有领取功能

推荐小黑盒!
页: [1] 2 3 4
查看完整版本: 爬取喜加一游戏,Github+PUSHPLUS,每日推送到微信