python实现扫描论坛回帖,自动发附件(应对求种之类的)

背景:

笔者因为需要在 www.kindle114.com 上分享一些图书,鉴于各种网盘神马的,都会把涉及版权的分享给失效了,总是换分享连接很麻烦,所以不得已只能通过邮件来传播知识,这就需要每天去看回帖的邮箱,一一发送,甚是麻烦。用一个python的脚本去扫描这些页面,把邮箱地址抓出来后自动发送才是懒人应该做的事情。

实现过程:

需要用crontab来实现每天定时执行这个脚本。

脚本一共分三部分:

1. 遍历指定帖子的所有回帖页,抓取Email格式的字符串,遇到某些情况就终止扫描

2. 比对过去发送过的列表,如果是新出现的则加入发送列表中

3. 将发送列表用python的email功能发送出去,并且带上附件

可以改进的地方:

1. 记录下每次扫描的终点,下次从这个位置扫描,避免重复扫描的浪费

2. 将URL和附件做成字典,可以灵活发送

3. 做成一个在线系统来维护这个数据和列表

注意点:

1. python的sendmail,发送列表要用list类型的

2. 如果是QQ邮箱,要把邮箱的独立密码去掉(我也不知道如果不去掉应该怎么去验证),否则会出现验证失败的错误

3. 可能有人会因为隐私原因,把邮箱地址写成怪怪的样子,那我就没辙了...

4  本文只是抛砖引玉,论坛形式千变万化,需要灵活修改脚本来实现网页抓取

5. 鉴于现在出版物粗糙的太多了,所以想先预览一下合情合理。如果觉得电子书或者视频有价值,请去电影院看电影或购买正版书籍,写这个短短文章都需要花费时间和精力,何况是写书和拍片,人家就是靠这个谋生。

#!/usr/bin/python

import sys, urllib, re
from email.Header import Header
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
import smtplib, datetime

def sendMail(toWho,fromWho,bookName,text):
    msg = MIMEMultipart()

    ## fill your BT torrent or eBook ...
    att = MIMEText(open(bookName, ‘rb‘).read(), ‘base64‘, ‘gb2312‘)
    att["Content-Type"] = ‘application/octet-stream‘
    att["Content-Disposition"] = ‘attachment; filename="Redis_shejiyushixian.mobi"‘
    msg.attach(att)

    msg[‘from‘] = fromWho
    msg[‘subject‘] = Header(bookName + ‘(‘ + str(datetime.date.today()) + ‘)‘,‘gb2312‘)
    msg.attach(MIMEText(text))

    server = smtplib.SMTP(‘smtp.qq.com‘)
    ## fill your QQ number and password
    server.login(‘1234567‘,‘xxxxxxxxxxxx‘)
    error=server.sendmail(msg[‘from‘],toWho,msg.as_string())
    server.close
    print error

dicSave = {}
for line in open("log"):
    dicSave[line.rstrip()] = 1

dic = {}
preDic = {}

## grep Email format string
pattern = re.compile(r‘[_.0-9a-z-][email protected](?:[0-9a-z][0-9a-z-]+.)+[a-z]{2,3}\b‘)

## please enhance this script to mark stop page as next start page
for x in range(1,100):

    ## fill forum url which need scan
    url="http://www.kindle114.com/thread-4567-%d-1.html" % x
    print "%s" % url

    wp = urllib.urlopen(url)
    content = wp.read()

    ## get mail list
    m = pattern.findall(content)

    stopFlag = 1
    for i in m:
        ## if page is duplicate means scan is wasting time and need stop
        if i not in preDic:
            stopFlag = 0

        ## only new mail address is needed to deliver
        if i not in dicSave:
            dic[i] = 1

    if stopFlag == 1:
        print "Scan Page Over %d\n" % x
        break

    preDic = m

mailList = []

## write deliver mail address to log to avoid duplicate deliver in next run
file_object = open("log", ‘a+‘)
for k,v in dic.items():
    print k
    mailList.append(k)
    file_object.write(k+"\n")

file_object.close()

if mailList:
    print "Delivering...\n";
    sendMail(mailList,‘[email protected]‘,‘Redis_shejiyushixian.mobi‘,‘What are you interested in ?‘)
    print "Deliver is completed...\n";
else:
    print "Mail List is empty\n";
时间: 2024-10-04 22:24:30

python实现扫描论坛回帖,自动发附件(应对求种之类的)的相关文章

python自动发邮件库yagmail

一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smtpserver = 'smtp.sina.com' # 发送邮箱用户/密码 user = '[email protected]' password = '123456' # 发送邮箱 sender = '[email protec

python 自动发邮件

一.一般发邮件的方法 Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件. 注意到构造MIMETEXT对象时,第一个参数就是邮件正文,第二个参数是MIME的subtype,传入'plain'表示纯文本,最终的MIME就是'text/plain',最后一定要用utf-8编码保证多语言兼容性. 然后,通过SMTP发出去: 1 # coding:utf-8 2 import smtplib 3 from email.mime.text i

Python自动发邮件-yagmail库

之前写过用标准库使用Python Smtplib和email发送邮件,感觉很繁琐,久了不用之后便忘记了.前几天看知乎哪些Python库让你相见恨晚?,看到了yagmail第三方库,学习过程中遇到一些问题,记录在此处. 之前使用的python的smtplib.email模块发模块的一步步骤是: 一.先导入smtplib模块 导入MIMEText库用来做纯文本的邮件模板二.发邮件几个相关的参数,每个邮箱的发件服务器不一样,以126为例子百度搜索服务器是 smtp.126.com三.写邮件主题和正文,

python自动发邮件

想着能用程序自动发邮件就好了,想到就动手写了一个自动发邮件的脚本. 一:前提准备(我使用的是qq邮箱) 1.开通qq邮箱的smtp服务 2.上代码 # -*- coding: utf-8 -*- # @Time : 18-10-14 上午11:00 # @Author : Felix Wang from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.im

自动发邮件、面向对象

一.自动发邮件 1.使用模块 yagmail,安装模块,python install yagmail-0.10.212-py2.py3-none-any.whl 如果直接pip install yagmail,发中文附件,文件名显示为乱码 2.在邮箱设置开启smtp服务 3.开启邮箱授权码,授权码是用于登录第三方邮件客户端的专用密码. 适用于登录以下服务: POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 自动发邮件代码示例: import yagmail use

Selenium 2自动化测试实战37(自动发邮件功能)

自动发邮件功能 例如,如果想在自动化脚本运行完成之后,邮箱就可以收到最新的测试报告结果.SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规划,由它来控制信件的中转方式.python的smtplib模块提供了一种很方便的途径用来发送电子邮件,它对SMTP协议进行了简单的封装.可以使用SMTP对象的sendmail方法发送邮件,通过help()可查看SMTP所提供的方法,命令如下: -from smtplib impo

自动发邮件功能

HTMLTestRunner.py """A TestRunner for use with the Python unit testing framework. Itgenerates a HTML report to show the result at a glance. The simplest way to use this is to invoke its main method. E.g. import unittest import HTMLTestRunne

java windows自动化-mail自动发邮件

本文旨在让测试人员了解如何发邮件 发邮件的话,最简单的事是直接手动发邮件,但是在自动化测试中,应做到让机器或者代码来自动发送邮件,笔者大概了解以下几种方法,总有一款口味适合你:1java代码来做下面即为我的java代码package util;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.*;import javax.mail.internet.*;impo

老弟学会Python后做了个自动扫雷程序给他的小伙伴,天天玩的不亦乐乎~

自动扫雷一般分为两种,一种是读取内存数据,而另一种是通过分析图片获得数据,并通过模拟鼠标操作,这里我用的是第二种方式. 一.准备工作 1.扫雷游戏 我是win10,没有默认的扫雷,所以去扫雷网下载 http://www.saolei.net/BBS/ 2.python 3 我的版本是 python 3.6.1 3.python的第三方库 win32api,win32gui,win32con,Pillow,numpy,opencv可通过 pip install --upgrade SomePack