吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4040|回复: 21
收起左侧

[Python 转载] 自动爬股市新闻,邮箱自动转发,这次做了个界面

[复制链接]
flower0712 发表于 2021-1-15 20:55
[Python] 纯文本查看 复制代码
import tkinter as tk
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import time
import threading
import ast

class jiemian():
    def __init__(self):
        self.root = tk.Tk()
        self.root.title('QQ邮箱发送热点新闻')
        self.size = self.root.geometry('300x400')
        self.sende_email_label = tk.Label(self.root, text='发送邮箱').place(x=0, y=0)
        self.send_get_label = tk.Label(self.root, text='授权码').place(x=0, y=20)
        self.set_subject_label = tk.Label(self.root, text='邮件主题').place(x=0, y=40)
        self.send_get_name_label = tk.Label(self.root, text='发件人名').place(x=0, y=60)
        self.accept_name_label = tk.Label(self.root, text='收件人名').place(x=0, y=80)
        self.get_time_label = tk.Label(self.root, text='新闻时间').place(x=0, y=100)
        self.get_news_label = tk.Label(self.root, text='新闻内容').place(x=0, y=120)
        self.get_urls_label = tk.Label(self.root, text='新闻网址').place(x=0, y=140)
        self.get_email_label = tk.Label(self.root, text='接受邮箱').place(x=0, y=190)
        self.send_email_entry = tk.Entry(self.root)
        self.send_email_entry.place(x=55, y=0)
        self.send_get_entry = tk.Entry(self.root)
        self.send_get_entry.place(x=55, y=20)
        self.set_subject_entry = tk.Entry(self.root)
        self.set_subject_entry.place(x=55, y=40)
        self.send_get_name_entry = tk.Entry(self.root)
        self.send_get_name_entry.place(x=55, y=60)
        self.accept_name_entry = tk.Entry(self.root)
        self.accept_name_entry.place(x=55, y=80)
        self.get_time_entry = tk.Entry(self.root, text='爬取新闻时间规则')
        self.get_time_entry.place(x=55, y=100)
        self.get_news_entry = tk.Entry(self.root, text='爬取新闻内容规则')
        self.get_news_entry.place(x=55, y=120)
        self.get_urls_entry = tk.Entry(self.root)
        self.get_urls_entry.place(x=55, y=140)
        self.get_email_entry = tk.Entry(self.root)
        self.get_email_entry.place(x=55, y=190)
        self.start = tk.Button(self.root, text='开始发送', command=lambda: jiemian.start_thread(self))
        self.start.place(x=55, y=160)
        self.read = tk.Button(self.root, text='导入上次配置', command=lambda: jiemian.read(self))
        self.read.place(x=120, y=160)
        self.root.mainloop()

    def start(self):
        self.user = {
            'send_email': self.send_email_entry.get(),
            'send_get': self.send_get_entry.get(),
            'set_subject': self.set_subject_entry.get(),
            'send_get_name': self.send_get_name_entry.get(),
            'accept_name': self.accept_name_entry.get(),
            'get_time': self.get_time_entry.get(),
            'get_news': self.get_news_entry.get(),
            'get_urls': self.get_urls_entry.get(),
            'get_email':self.get_email_entry.get()
        }
        if self.user['get_urls']!='' :
            self.users = str(self.user)
            f = open('dict.txt', 'w')
            f.writelines(self.users)
            f.close()
            chrome_options = Options()
            chrome_options.add_argument('--headless')
            b = webdriver.Chrome(options=chrome_options)
            while True:
                b.get(self.user['get_urls'])
                r_time = b.find_element_by_xpath(self.user['get_time']).text
                r_text = b.find_element_by_xpath(self.user['get_news']).text
                really_text = r_time + '\n' + r_text
                text = ''
                print(really_text)
                try:
                    if really_text != text:
                        text = really_text
                        mail_host = "smtp.qq.com"  # 设置的邮件服务器host必须是发送邮箱的服务器,与接收邮箱无关。
                        mail_user = self.user['send_email']  # qq邮箱登陆名
                        mail_pass = self.user['send_get']  # 开启stmp服务的时候并设置的授权码,注意!不是QQ密码。

                        sender = self.user['send_email']  # 发送方qq邮箱
                        receivers = self.users_['get_email'] # 接收方qq邮箱

                        message = MIMEText(text, 'plain', 'utf-8')
                        message['From'] = Header(self.user['send_get_name'], 'utf-8')  # 设置显示在邮件里的发件人
                        message['To'] = Header(self.user['accept_name'], 'utf-8')  # 设置显示在邮件里的收件人

                        subject = self.user['set_subject']
                        message['Subject'] = Header(subject, 'utf-8')  # 设置主题和格式

                        try:
                            smtpobj = smtplib.SMTP_SSL(mail_host, 465)  # 本地如果有本地服务器,则用localhost ,默认端口25,腾讯的(端口465或587)
                            smtpobj.set_debuglevel(1)
                            smtpobj.login(mail_user, mail_pass)  # 登陆QQ邮箱服务器
                            smtpobj.sendmail(sender, receivers, message.as_string())  # 发送邮件
                            smtpobj.quit()  # 退出
                            print("邮件发送成功")
                            time.sleep(300)
                            b.refresh()
                            continue
                        except smtplib.SMTPException as e:
                            print("Error:无法发送邮件")
                            print(e)
                            b.refresh()
                            continue

                except:
                    print('热点暂未更新')
                    time.sleep(300)
                    b.refresh()
                    continue

    def start_thread(self):
        t = threading.Thread(target=lambda: jiemian.start(self))
        t.setDaemon(True)
        t.start()

    def read(self):
        with open('dict.txt', 'r') as f:
            self.users_ = ast.literal_eval(f.read())
        self.send_email_entry.insert(0, self.users_['send_email'])
        self.send_get_entry.insert(0, self.users_['send_get'])
        self.set_subject_entry.insert(0, self.users_['set_subject'])
        self.send_get_name_entry.insert(0,self.users_['send_get_name'])
        self.accept_name_entry.insert(0, self.users_['accept_name'])
        self.get_time_entry.insert(0, self.users_['get_time'])
        self.get_news_entry.insert(0,self.users_['get_news'])
        self.get_urls_entry.insert(0, self.users_['get_urls'])
        self.get_email_entry.insert(0,self.users_['get_email'])

if __name__ == '__main__':
    jiemian()



发送邮箱:需要开通QQ邮箱SMTP服务
授权码:开通了SMTP服务会给你

新闻时间规则://*[@id="kxlist"]/div[1]/div[1]
新闻内容规则://*[@id="kxlist"]/div[1]/div[2]/div[1]/div[1]/span
新闻网址:http://m.eastmoney.com/kuaixun
接受邮箱:想要接受的邮箱(如果收不到需要将发送邮箱加入白名单)
规则:XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。(百度百科){:1_918:}

邮件信息

邮件信息

工作原理

工作原理

程序截图

程序截图

免费评分

参与人数 8吾爱币 +6 热心值 +8 收起 理由
xufanz + 1 + 1 谢谢@Thanks!
xxscwsrym + 1 + 1 我很赞同!
zxw + 1 已经处理,感谢您对吾爱破解论坛的支持!
ying656 + 1 + 1 谢谢@Thanks!
刘跃飞 + 1 + 1 我很赞同!
oyes520 + 1 + 1 我很赞同!
hcp12 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
leisukeji + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| flower0712 发表于 2021-1-16 18:45
xufanz 发表于 2021-1-16 13:55
运行了一下,每5分钟发一次邮件,没更新消息的话会一直发重复的邮件

可以自己调整一下,把第74行代码放到68行下面,这个弄错了
 楼主| flower0712 发表于 2021-1-16 18:41
xufanz 发表于 2021-1-16 13:55
运行了一下,每5分钟发一次邮件,没更新消息的话会一直发重复的邮件

忘了检测内容重复了
leisukeji 发表于 2021-1-15 21:19
cmd360 发表于 2021-1-15 21:31
这个好,就是不知道怎么用
流星似我 发表于 2021-1-15 21:45
楼主发的这个分享太棒了,太实用啦~!
yoyoma211 发表于 2021-1-15 22:34
这个要学习下,感谢楼主给力分享
tbloy 发表于 2021-1-15 22:48
爬虫还真是厉害呀。
xjshuaishuai 发表于 2021-1-15 23:30
楼主的分享很实用!谢谢了!
zxw 发表于 2021-1-15 23:50
小白表示 想白P 个成品哈哈
zhengxinjun 发表于 2021-1-16 00:41
人生苦短我学Python
ccwjj 发表于 2021-1-16 07:50
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 17:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表