这个帖子我不知道版规能不能发,看了下版规也没看到明确的要求。。。
所以不能发的话,,删源码吧 让我帖子数+1
原理:检测到新帖子包含有“锭”字,就会打开浏览器并跳转到相关帖子。
代码如下
# -*- coding: UTF-8 -*- import win32gui import win32con import time import requests from bs4 import BeautifulSoup import logging import webbrowser class TestTaskbarIcon: def __init__(self): wc = win32gui.WNDCLASS() hinst = wc.hInstance = win32gui.GetModuleHandle(None) wc.lpszClassName = "PythonTaskbarDemo" wc.lpfnWndProc = {win32con.WM_DESTROY: self.OnDestroy, } classAtom = win32gui.RegisterClass(wc) style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU self.hwnd = win32gui.CreateWindow(classAtom, "Taskbar Demo", style, 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 0, 0, hinst, None) hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION) nid = (self.hwnd, 0, win32gui.NIF_ICON, win32con.WM_USER + 20, hicon, "Demo") win32gui.Shell_NotifyIcon(win32gui.NIM_ADD, nid) def showMsg(self, title, msg): nid = (self.hwnd, # 句柄 0, # 托盘图标ID win32gui.NIF_INFO, # 标识 0, # 回调消息ID 0, # 托盘图标句柄 "TestMessage", # 图标字符串 msg, # 气球提示字符串 0, # 提示的显示时间 title, # 提示标题 win32gui.NIIF_INFO # 提示用到的图标 ) win32gui.Shell_NotifyIcon(win32gui.NIM_MODIFY, nid) def OnDestroy(self): nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # Terminate the app. def GetInfo(AimUrl): res = requests.get(AimUrl) html = res.text html = html.encode("ISO-8859-1") html = html.decode("utf-8") soups = BeautifulSoup(html, 'html.parser') return soups def Remind(): t = TestTaskbarIcon() t.showMsg("您关注的内容有了更新", "有人疑似要发锭了!") time.sleep(5) win32gui.DestroyWindow(t.hwnd) def log(): # 创建一个logging对象 logger = logging.getLogger() # 创建一个文件对象 创建一个文件对象,以UTF-8 的形式写入 标配版.log 文件中 fh = logging.FileHandler('AllLog.log', encoding='utf-8') # 创建一个屏幕对象 sh = logging.StreamHandler() # 配置显示格式 可以设置两个配置格式 分别绑定到文件和屏幕上 formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s') fh.setFormatter(formatter) # 将格式绑定到两个对象上 sh.setFormatter(formatter) logger.addHandler(fh) # 将两个句柄绑定到logger logger.addHandler(sh) logger.setLevel(10) # 总开关 fh.setLevel(10) # 写入文件的从10开始 sh.setLevel(30) # 在屏幕显示的从30开始 logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') if __name__ == '__main__': log() print('请输入刷新时效(整数,越小刷新越快,但过可能会错过。建议5左右)') PutTime = input('>>>') aim_url = 'http://zhannei.baidu.com/cse/site?q=%E9%94%AD&s=&cc=mcbbs.net&sti=' + str(PutTime) print('0000 INFO: 系统初始化完成..') print('0001 INFO: 正在暗中观察发锭选手..') print('0002 INFO: 作者:mcbbs [雨韵] uid:1617821') i = 3 while 1: soup = GetInfo(aim_url) divs = soup.find_all("h3", class_='c-title') if len(divs) < 1: print(str(i).zfill(4) + ' INFO: 暂无新帖') i = i + 1 else: i = i + 1 for r in divs: url = r.a['href'] print(str(i).zfill(4) + ' INFO: 发现新的帖子地址 ' + url) webbrowser.open(url) Remind() exit() time.sleep(2) |
之所以放出来还有一个原因
这个代码完成于二月十号左右 百度近期更新后非常不稳定,成功率极低。且本身检测的内容便不是很准确 因此即使其他人得到这个代码,也没有啥卵用。。。 毕竟是半过期的代码(手动狗头) |
我发现我忘记发个锭把折叠召唤过来了= =
划重点:
这个现在已经非常的不好用了,所以我才会发出来= =
而且我现在上班也没时间去抢锭
答疑:
这个是用python语言写的爬虫程序。 大概过程如下: 百度会对mcbbs进行数据爬取,从发帖到被爬取约10s左右。 这个程序会向百度的站内搜索引擎提交搜索关键词“锭”的请求。 百度站内搜索链接解析: http://zhannei.baidu.com/cse/site?q=[这里是关键词]&cc=mcbbs.net&sti=[这里是筛选最近X分钟的帖子] 例如:http://zhannei.baidu.com/cse/site?q=锭&s=&cc=mcbbs.net&sti=5 指的就是5分钟内有没有含有关键词“锭”的帖子出现 (由于近期百度站内搜索不稳定,所以多进几次才能显示真正的效果) 百度响应请求后,返回【在规定的时间内是否有含有关键词的帖子,以及帖子的地址是什么】 如果5分钟内有这样的一个帖子,则会在右下角消息区弹窗提醒有关注内容 这里由于我不会【点击消息则跳转】因此我选择了弹窗提醒的同时打开浏览器。 有会的可以教教我吗qaq 这里的浏览器是默认浏览器,也就是你平时用来浏览mcbbs的浏览器。 你的账号已经在这个浏览器登录、所以可以节省登陆的时间。 之后就需要你根据是否的确是发锭或讨论帖,从而进行针对性的回复。 比如恰锭和水贴 这种通过爬取百度间接获取内容的爬虫对mcbbs的网站服务器比较友好。 基本不会额外占用带宽和处理器。 也因此,百度站内搜索近期更新/不稳定,导致这个爬虫失效。 |