设为首页 收藏本站
查看: 747|回复: 0

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

[复制链接]

尚未签到

发表于 2015-4-21 10:22:55 | 显示全部楼层 |阅读模式
  背景:
  笔者因为需要在 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-]+@(?:[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 = 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,'77167680@qq.com','Redis_shejiyushixian.mobi','What are you interested in ?')
print "Deliver is completed...\n";
else:
print "Mail List is empty\n";
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59151-1-1.html 上篇帖子: 世界完全对称日计算(python) 下篇帖子: 高效率的排列组合算法--《编程珠矶》--python实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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