KIMG 发表于 2015-10-14 13:15

给大家带来一个监测活动的小工具(源代码)

本帖最后由 KIMG 于 2015-10-14 18:07 编辑

增加了poco论坛活动的抓取------


发一张我运行的截图


背景如下:
本人是位屌丝摄影师,平常想多拍拍美女啥的,怎么办呢???
-----------------------------------------------------------------------------------
各个论坛都会有免费的摄影活动,不过有时候关注晚了就会没有名额了,而是我写了这款小工具
每30s监控是否有新活动,有的话发邮件到qq邮箱,然后qq邮箱是绑定的微信,所以,如果有活动,我可以第一时间参与{:1_918:}
我抓的是蜂鸟网的,大家如果知道哪些网站会经常发布免费的活动的话,麻烦提供给我~~谢谢

代码如下
# coding: utf-8
import smtplib
from email.mime.text import MIMEText
import requests
from lxml import etree
import os
import time
import sys
reload(sys)
sys.setdefaultencoding('utf-8')



class mailhelper(object):
    '''
    这个类实现发送邮件的功能
    '''
    def __init__(self):

      self.mail_host="smtp.sina.com"#设置服务器
      self.mail_user="fasong_1_12"    #用户名
      self.mail_pass="yijiayidengyu2"   #密码
      self.mail_postfix="sina.com"#发件箱的后缀

    def send_mail(self,to_list,sub,content):
      me="huodonghelper"+"<"+self.mail_user+"@"+self.mail_postfix+">"
      msg = MIMEText(content,_subtype='plain',_charset='utf-8')
      msg['Subject'] = sub
      msg['From'] = me
      msg['To'] = ";".join(to_list)
      try:
            server = smtplib.SMTP()
            server.connect(self.mail_host)
            server.login(self.mail_user,self.mail_pass)
            server.sendmail(me, to_list, msg.as_string())
            server.close()
            return True
      except Exception, e:
            print str(e)
            return False

class huodonghelper(object):
    '''
    这个类实现将爬取活动第一条内容
    '''
    def __init__(self):
      self.url1 = 'http://huodong.fengniao.com/apply-list-2-0-0-0-.html' #请输入准备抓取的活动地址
      self.url2 = 'http://event.poco.cn/module/event_get_info_data_v2.php?location_id=101003001&category=2&search_time_type=future_all&p=1&get_left_menu=1&list_index=1&show_type=image_text_list&show_type_index=0&first_category=2'


    def fengniao(self):
      html = requests.post(self.url1).content
      selector = etree.HTML(html)
      try:
            title = selector.xpath('/html/body/div/div/ul/li/div/div/h4/a/text()') # 活动标题
            hdtime = selector.xpath('/html/body/div/div/ul/li/div/div/p/text()') # 活动时间
            hddd = selector.xpath('/html/body/div/div/ul/li/div/div/p/text()') # 活动地点
            hdfs = selector.xpath('/html/body/div/div/ul/li/div/div/p/span/text()') # 活动方式
            syme = selector.xpath('/html/body/div/div/ul/li/div/div/h4/span/text()')# 剩余名额
            href = selector.xpath('/html/body/div/div/ul/li/div/div/h4/a/@href')
      except:
            print u'出错了'
      href = 'http://huodong.fengniao.com'+ href
      sendtext = '活动网址:'+ href + '\n' +'标题:'+ title + '\n' +'活动时间:' + hdtime +'\n' + '活动地点:' + hddd +'\n'+ '活动方式:' + hdfs+'\n'+ '剩余人数:' + syme
      if syme == u'报名进行中':
            # sss = selector.xpath('/html/body/div/div/ul/li/div/div/p/span/text()')
            # xsf = selector.xpath('/html/body/div/div/ul/li/div/div/p/span/span/text()')
            # ts = sss+xsf+sss+xsf+sss+xsf+sss # 报名还剩:3天5小时58分
            qr = selector.xpath('/html/body/div/div/ul/li/div/div/p/span/span/text()')
            sy = selector.xpath('/html/body/div/div/ul/li/div/div/p/span/strong/text()')
            ts ='\n' +u'确认'+qr+u'剩余'+sy
            sendtext = sendtext + '\n' +'提示:'+ts

      return sendtext
    def poco(self):
      html = requests.post(self.url2).text
      selector = etree.HTML(html)
      try:
            title = selector.xpath('/html/body/div/ul/li/div/h3/a/text()')
            href = selector.xpath('/html/body/div/ul/li/div/h3/a/@href')
            href = 'http://event.poco.cn/event_browse.php?'+href[-14:]
            hdjs = selector.xpath('/html/body/div/ul/li/div/p/text()')
            hdlb = selector.xpath('/html/body/div/ul/li/div/table/tr/td/p/text()')
            hdsj = selector.xpath('/html/body/div/ul/li/div/table/tr/td/p/text()')
            hdfy = selector.xpath('/html/body/div/ul/li/div/table/tr/td/p/text()')
            bmrs = selector.xpath('/html/body/div/ul/li/div/table/tr/td/p/text()')
            hddz = selector.xpath('/html/body/div/ul/li/div/table/tr/td/p/span/text()')
      except:
            print u'出错了'
      sendtext1 = '活动标题:'+title+'\n'+'活动介绍:'+hdjs+'\n'+'活动类别:'+hdlb+'\n'+'活动时间:'+hdsj+'\n'+'活动费用:'+hdfy+'\n'+'报名人数:'+bmrs+'\n'+'活动地址:'+hddz
      return sendtext1

    def tosave(self,text,wjm):
      f= open(wjm+'.txt','a')
      f.write(text + '\n')
      f.close()

    def tocheck(self,data,wjm):
      if not os.path.exists(wjm+'.txt'):
            return True
      else:
            f = open(wjm+'.txt', 'r')
            existfengniao = f.read()
            if data + '\n' in existfengniao:
                return False
            else:
                return True

if __name__ == '__main__':
    mailto_list=[''] #此处填写接收邮件的邮箱,例如qq邮箱啥的
    helper = huodonghelper()
    while True:
      content = helper.fengniao()
      if helper.tocheck(content,'fengniao'):
            if mailhelper().send_mail(mailto_list,u"蜂鸟有活动啦",content):
                print u"发送成功"
            else:
                print u"发送失败"
            helper.tosave(content,'fengniao')
            print content
      else:
            print u'pass'

      content1 = helper.poco()
      if helper.tocheck(content1,'poco'):
            if mailhelper().send_mail(mailto_list,u"POCO有活动啦",content1):
                print u"发送成功"
            else:
                print u"发送失败"
            helper.tosave(content1,'poco')
            print content1
      else:
            print u'pass'
      time.sleep(30)

KIMG 发表于 2015-10-14 14:14

msn101 发表于 2015-10-14 13:19
不是摄影师怎么办

那你可以看妹子去,哈哈哈

msn101 发表于 2015-10-14 13:19

不是摄影师怎么办{:17_1050:}

吃兔子de胡萝卜 发表于 2015-10-14 13:27

难道专找妹子的?

smbtsmbt123 发表于 2015-10-14 13:29

这个是什么用的??我没明白- -就检测论坛活动的么??

KIMG 发表于 2015-10-14 14:17

吃兔子de胡萝卜 发表于 2015-10-14 13:27
难道专找妹子的?

这些活动基本都是妹子,难道你想找汉子{:1_907:}

KIMG 发表于 2015-10-14 14:18

smbtsmbt123 发表于 2015-10-14 13:29
这个是什么用的??我没明白- -就检测论坛活动的么??

对呀,不用你一直刷新活动网页啊 ,可以直接通知到微信上

851365960 发表于 2015-10-14 14:52

如今宅男多 ,只看看看。

851365960 发表于 2015-10-14 14:52

多谢分享。

asdfgasd 发表于 2015-10-14 14:56

城里人真会玩呀
页: [1] 2
查看完整版本: 给大家带来一个监测活动的小工具(源代码)