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

[经验分享] python简单爬虫定时推送同花顺直播及荐股至邮箱

[复制链接]

尚未签到

发表于 2015-12-1 12:06:17 | 显示全部楼层 |阅读模式

  • 1、初衷:实践
  • 2、技术:python requests Template
  • 3、思路:根据直播页面获取评价最高的前十博主,定时爬行最新的消息和实战股票
  • 4、思路:python 编辑简单邮件html模板
  • 5、难点:邮件html模板的设计,还需要邮箱支持爬虫文件
    '''
    -- #coding:utf-8
    import requests
    from lxml import etree
    from sendmail import sendmail
    import sys, time
    from string import Template
    reload(sys)
    sys.setdefaultencoding('utf-8')1 定义类
    class thszb:
      thsbz_list = []
      zb_contest_list = []
      stock_list = []
      def __init
    (self, url):

    • self.url = url
    • self.get_ths_bz()
    • self.get_zb_content_list()
    2 获取博主基本信息
    def get_ths_bz(self):

    •   t_html = etree.HTML(requests.get(self.url).text).xpath('/html/body/div[1]/a')
    •   tlist =[]
    • for t in t_html:
    •       d ={}
    •       d["id"]= str(t.xpath('@data-statid')[0])[str(t.xpath('@data-statid')[0]).rindex('_')+1:]
    •       d["title"]= str(t.xpath('div[1]/strong/text()')[0].decode('utf-8').encode('GB18030')).strip().strip(
    • '\n').strip(
    • '\r')
    •       d["url"]= str(t.xpath('@data-clienturl')[0])[str(t.xpath('@data-clienturl')[0]).rindex('=')+1:]
    •       d["isAgree"]=int(t.xpath('div[3]/p/text()')[0])
    •       d["oper"]=self.get_zb_stock_url(d["url"])
    •       tlist.append(d)
    • self.ths_bz_list = sorted(tlist, key=lambda s: s["isAgree"], reverse=True)
    def get_zb_content_list(self):

    • print(self.ths_bz_list[:10])
    • for bz inself.ths_bz_list[:10]:
    •       t_html = etree.HTML(requests.get(bz["url"]).text).xpath('//*[@id="J_Mlist"]/div')
    • if len(t_html)>0:
    •           t = t_html[0]
    •           zbtime = t.xpath("p/span/text()")[0]
    •           zbtext = str(t.xpath("p/text()")[0].decode('utf-8').encode('GB18030')).strip().strip('\n').strip('\r')
    • print("   %s %s:%s"%(bz['oper'],zbtime, zbtext))
    • self.zb_contest_list.append(
    • {"gpurl": bz['oper'],"title": bz['title'],"zbtime": zbtime,"zbtext": zbtext})
    • returnself.zb_contest_list
    3 获取博主实战股票页面
    def get_zb_stock_url(self, bz_url):

    •   html = requests.get(bz_url).text
    •   t_html_gp = etree.HTML(html).xpath('//*[@id="gotracelink"]/@data-iosurl')
    • if len(t_html_gp)>0:
    • return t_html_gp[0]
    4 获取博主实战股票信息
    def get_zb_stock(self, gp_url):

    •   stock_list =[]
    •   stock_list.append(
    • {"code": u"股票编码".decode('utf-8').encode('GB18030'),"name": u"股票名称".decode('utf-8').encode('GB18030'),
    • "date": u"买入日期".decode('utf-8').encode('GB18030'),
    • "money": u"盈亏金额".decode('utf-8').encode('GB18030'),
    • "rate": u"盈利率".decode('utf-8').encode('GB18030')})
    •   t_html = etree.HTML(requests.get(gp_url).text).xpath('//*[@id="infoTpl"]/ul')
    • if len(t_html)>0:
    • for t in t_html:
    • try:
    •               code = t.xpath('li[1]/div[2]/text()')[0]
    •               name = t.xpath('li[1]/div[1]/text()')[0].decode('utf-8').encode('GB18030')
    •               date = str(t.xpath('li[2]/text()')[0]).strip()
    •               money = str(t.xpath('li[3]/text()')[0]).strip()
    •               rate = str(t.xpath('li[4]/text()')[0]).strip()
    •               stock_list.append({"code": code,"name": name,"date": date,"money": money,"rate": rate})
    • except:
    • pass
    • return stock_list
    5 发送邮件
    def send_mail(self):

    •   mymail = sendmail([''])
    •   s =""
    •   tt =Template(mymail.title_template)
    •   tt_gp =Template(mymail.table_template)
    • for zb inself.zb_contest_list:
    •       gp_s =""
    •       pglist =self.get_zb_stock(zb["gpurl"])
    • for gp in pglist:
    • try:
    • iffloat(gp["money"])>0.0:
    •                   gp["isBold"]='style="color: #F00,; font-weight: bold;"'
    •               gp_s = gp_s + tt_gp.substitute(gp)
    • except:
    • pass
    •       s = s + str(tt.substitute(zb))+ gp_s +"  </table>"
    • if mymail.send_mail(u'同花顺直播 %s '% time.strftime("%Y-%m-%d %H:%M", time.localtime())," %s"%(s)):
    • print("send_mail ok!^_^")
    • else:
    • print("send_mail fail!~_~")
    '''
    if name == 'main':
      ths = ths_zb("http://t.10jqka.com.cn/m/zhibo/index.html")
      ths.send_mail()
    '''发送邮件
    import smtplib
    from email.mime.text import MIMEText1 邮件类
    class sendmail:2 python模板
    title_template = '''

    • <divid="J_Mlist">
    • <strongstyle="color:red;">$title $zbtime </strong>
    • <div>
    • <p>
    •             $zbtext
    • </p>
    • </div>
    • </div>
    • <tablewidth="400"border="1">
    •     '''
    •     table_template = '''
    • <tr ${isBold}>
    • <td>${code}</td>
    • <td>${name}</td>
    • <td>${date}</td>
    • <td><spanclass="ping">${money}</span></td>
    • <td>${rate}</td>
    • </tr>
    '''
      mailtolist = []
      mailhost = "smtp.126.com"
      mail_user = ""
      mail_pass = ""
      mail_postfix = "126.com"
      def __init
    (self, mailto_list):

    • self.mailto_list = mailto_list
    2发送html格式邮件
    def send_mail(self, sub, content):

    •   me =sub+"<"+self.mail_user +"@"+self.mail_postfix +">"
    •   msg =MIMEText(content, _subtype="html", _charset="gb2312")
    •   msg["Subject"]=sub
    •   msg["From"]= me
    •   msg["To"]=";".join(self.mailto_list)
    • try:
    •       s = smtplib.SMTP()
    •       s.connect(self.mail_host)
    •       s.login(self.mail_user,self.mail_pass)
    •       s.sendmail(me,self.mailto_list, msg.as_string())
    •       s.close()
    • returnTrue
    • exceptException, e:
    • print str(e)
    • returnFalse
    效果展示
    DSC0000.png

运维网声明 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-145843-1-1.html 上篇帖子: Notes on PEP333 (Python Web Server Gateway Interface) 下篇帖子: python-redis 入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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