# Python学习笔记-删帖自动检查脚本

删帖自动检查脚本

删帖自动检查

因为现在的工作原因,需要做一个自动检查帖子存活的脚本,我搞到了he0119签到的脚本,借此机会学习(抄)一下。

检查网页中关键词的存在

这个地方需要用到 requests 库。

我一直觉得自己看文档的能力很弱,这次直接上文档吧:Requests: 让 HTTP 服务人类

使用命令 pip3 list | findstr requests 检查requests库的版本号。

Python
import requests

r = requests.get('http://tieba.baidu.com/p/0000000000')
if 'EU吃胖胖' in r.text:
    print('有')
else:
    print('无')

检查多个帖子的关键词

Python
import time
import requests

def main():
    # 通过for-in循环逐行读取
    with open('贴号.txt', mode='r') as f:
        for line in f:
            a = line.strip()
    # 通过.strip()去掉\n
            r = requests.get( a )
            if 'EU吃胖胖' in r.text:
                print('正常')
            else:
                print( a ,'被删帖' ,sep= '  ')
            time.sleep(0.5)
    print('检查完成')
if __name__ == '__main__':
    main()

使用正则表达式指定检索范围

在线测试正则表达式匹配情况

Python
import time
import requests
import re 

def main():
    # 通过for-in循环逐行读取
    with open('贴号.txt', mode='r') as f:
        for line in f:
            a = line.strip()
            pattern = re.compile(r'EU吃胖胖|EU胖胖吃')
            r = requests.get( a )
            mylist = re.findall(pattern, r.text)
            if len(mylist) == 0:
                print( a ,'被删帖' ,sep= '  ')
                print('正常')
            else:
                
                print('正常')
            time.sleep(0.5)
    print('检查完成')
if __name__ == '__main__':
    main()

he0119提供了全新的正则表达式: (?=.{0,2}A)(?=.{0,2}B)(?=.{0,2}C)[ABC]{3}

先复习一下正则表达式的知识。

(?=exp): 匹配exp前面的位置

?:匹配0次或1

{N} :匹配N

{M,N} :匹配至少M次至多N

. :匹配任意字符

[] :匹配来自字符集的任意单一字符

GUI和多线程

Python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tkinter as tk
import time
import requests
import re
window = tk.Tk()
window.title('帖子异常检查')
window.geometry('500x500')

import threading

class CheckThread(threading.Thread):
    def run(self):
        """Overrides Thread.run. Don't call this directly its called internally
        when you call Thread.start().
        """
        with open('贴号.txt', mode='r') as f:
            for line in f:
                a = line.strip()
                var2 = e2.get()
                pattern = re.compile(var2)
                r = requests.get( a )
                mylist = re.findall(pattern, r.text)
                text = f'{a},{check(r, mylist)}'
                t.insert('insert', text)
            t.insert('insert', '检查完成')

# 定义两个触发事件时的函数insert_point和insert_end(注意:因为Python的执行顺序是从上往下,所以函数一定要放在按钮的上面)
def insert(): # 在鼠标焦点处插入输入内容
    worker = CheckThread()
    worker.start()


def check(r, mylist):
    if '该贴已被删除' in r.text:
         result = ( '被删帖\n')
    elif len(mylist) == 0:
         result = ( '广告被删\n')
    else:
         result = ('正常\n')
    time.sleep(0.5)
    return (result)

l1 = tk.Label(window, text='请在下方输入关键词', width=30, height=2)
l1.pack()
e2 = tk.Entry(window,show=None, width=50,)
e2.pack()
b = tk.Button(window, text='开始检测', width=10,
               height=2, command=insert)
b.pack()

# 第7步,创建并放置一个多行文本框text用以显示,指定height=3为文本框是三个字符高度
t = tk.Text(window, height=20)
t.pack()

# 第8步,主窗口循环显示
window.mainloop()

针对可能出现的检查错误,进行再检查

通过邮件发送错误的网页到指定邮箱

自动化运行

最后编辑于
文章链接: http://pheustal.com/2019/11-12/tieba1
本作品采用CC-BY-SA许可。