• 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):

    1. self.url = url
    2. self.get_ths_bz()
    3. self.get_zb_content_list()

    2 获取博主基本信息

    def get_ths_bz(self):

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

    def get_zb_content_list(self):

    1. print(self.ths_bz_list[:10])
    2. for bz inself.ths_bz_list[:10]:
    3. t_html = etree.HTML(requests.get(bz["url"]).text).xpath('//*[@id="J_Mlist"]/div')
    4. if len(t_html)>0:
    5. t = t_html[0]
    6. zbtime = t.xpath("p/span/text()")[0]
    7. zbtext = str(t.xpath("p/text()")[0].decode('utf-8').encode('GB18030')).strip().strip('\n').strip('\r')
    8. print(" %s %s:%s"%(bz['oper'],zbtime, zbtext))
    9. self.zb_contest_list.append(
    10. {"gpurl": bz['oper'],"title": bz['title'],"zbtime": zbtime,"zbtext": zbtext})
    11. returnself.zb_contest_list

    3 获取博主实战股票页面

    def get_zb_stock_url(self, bz_url):

    1. html = requests.get(bz_url).text
    2. t_html_gp = etree.HTML(html).xpath('//*[@id="gotracelink"]/@data-iosurl')
    3. if len(t_html_gp)>0:
    4. return t_html_gp[0]

    4 获取博主实战股票信息

    def get_zb_stock(self, gp_url):

    1. stock_list =[]
    2. stock_list.append(
    3. {"code": u"股票编码".decode('utf-8').encode('GB18030'),"name": u"股票名称".decode('utf-8').encode('GB18030'),
    4. "date": u"买入日期".decode('utf-8').encode('GB18030'),
    5. "money": u"盈亏金额".decode('utf-8').encode('GB18030'),
    6. "rate": u"盈利率".decode('utf-8').encode('GB18030')})
    7. t_html = etree.HTML(requests.get(gp_url).text).xpath('//*[@id="infoTpl"]/ul')
    8. if len(t_html)>0:
    9. for t in t_html:
    10. try:
    11. code = t.xpath('li[1]/div[2]/text()')[0]
    12. name = t.xpath('li[1]/div[1]/text()')[0].decode('utf-8').encode('GB18030')
    13. date = str(t.xpath('li[2]/text()')[0]).strip()
    14. money = str(t.xpath('li[3]/text()')[0]).strip()
    15. rate = str(t.xpath('li[4]/text()')[0]).strip()
    16. stock_list.append({"code": code,"name": name,"date": date,"money": money,"rate": rate})
    17. except:
    18. pass
    19. return stock_list

    5 发送邮件

    def send_mail(self):

    1. mymail = sendmail([''])
    2. s =""
    3. tt =Template(mymail.title_template)
    4. tt_gp =Template(mymail.table_template)
    5. for zb inself.zb_contest_list:
    6. gp_s =""
    7. pglist =self.get_zb_stock(zb["gpurl"])
    8. for gp in pglist:
    9. try:
    10. iffloat(gp["money"])>0.0:
    11. gp["isBold"]='style="color: #F00,; font-weight: bold;"'
    12. gp_s = gp_s + tt_gp.substitute(gp)
    13. except:
    14. pass
    15. s = s + str(tt.substitute(zb))+ gp_s +" </table>"
    16. if mymail.send_mail(u'同花顺直播 %s '% time.strftime("%Y-%m-%d %H:%M", time.localtime())," %s"%(s)):
    17. print("send_mail ok!^_^")
    18. else:
    19. 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 MIMEText

    1 邮件类

    class sendmail:

    2 python模板

    title_template = '''

    1. <divid="J_Mlist">
    2. <strongstyle="color:red;">$title $zbtime </strong>
    3. <div>
    4. <p>
    5. $zbtext
    6. </p>
    7. </div>
    8. </div>
    9. <tablewidth="400"border="1">
    10. '''
    11. table_template = '''
    12. <tr ${isBold}>
    13. <td>${code}</td>
    14. <td>${name}</td>
    15. <td>${date}</td>
    16. <td><spanclass="ping">${money}</span></td>
    17. <td>${rate}</td>
    18. </tr>

    '''
    mailtolist = []
    mailhost = "smtp.126.com"
    mail_user = ""
    mail_pass = ""
    mail_postfix = "126.com"
    def __init
    (self, mailto_list):

    1. self.mailto_list = mailto_list

    2发送html格式邮件

    def send_mail(self, sub, content):

    1. me =sub+"<"+self.mail_user +"@"+self.mail_postfix +">"
    2. msg =MIMEText(content, _subtype="html", _charset="gb2312")
    3. msg["Subject"]=sub
    4. msg["From"]= me
    5. msg["To"]=";".join(self.mailto_list)
    6. try:
    7. s = smtplib.SMTP()
    8. s.connect(self.mail_host)
    9. s.login(self.mail_user,self.mail_pass)
    10. s.sendmail(me,self.mailto_list, msg.as_string())
    11. s.close()
    12. returnTrue
    13. exceptException, e:
    14. print str(e)
    15. returnFalse

    效果展示

python简单爬虫定时推送同花顺直播及荐股至邮箱的更多相关文章

  1. 后端利用Redis队列及哈希实现定时推送提醒的三个思路

    周煦辰 2016年8月31日 本文介绍了一下本人在开发过程中遇到"定时推送提醒"的需求的时候所思考的三种解决方案. 明确问题 首先明确一下这个需求可能包含的几个"坑&qu ...

  2. 通过server酱实现定时推送天气情况,再不用担心你的糊涂蛋女友忘带伞了~~

    昨天菜鸟小白给大家留了一个课后作业,如何实现天气的定时推送.有没有小伙伴做出来答案呢?今天菜鸟小白给大家分享我的实现方式吧.这个是我今天整的程序流程图,昨天我们还只是实现了中间的通过和风天气API获取 ...

  3. WebSocket(4)---实现定时推送比特币交易信息

    实现定时推送比特币交易信息 实现功能:跟虚拟币交易所一样,时时更新当前比特币的价格,最高价,最低价,买一价等等...... 提示:(1)本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocke ...

  4. 使用flask_socketio实现服务端向客户端定时推送

    websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...

  5. Docker 部署 _实现每日情话 定时推送(apscheduler)

    由于最近工作比较忙,后续博客可能更新不及时,哈哈 前言: 由于python对于微信推送不够友好,需要扫码登录,短信接口需要RMB.我就想到了qq邮箱发送到好友,然而微信有qq邮箱提醒功能,就实现了我需 ...

  6. Python简单爬虫入门三

    我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

  7. Python简单爬虫入门二

    接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...

  8. GJM : Python简单爬虫入门(二) [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  9. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...

随机推荐

  1. Java--简单的Spring AOP配置以及AOP事物管理,JDK/GCLib动态代理

    一.看一下简单的通过XML的AOP配置 1.首先创建一个简单的Student类 public class Student { private Integer age; private String n ...

  2. Struct2

    1.MVC思想概述 Servlet作为前端控制器,负责接收客户端发送的请求,在Servlet中只包含控制逻辑和简单的前端处理:然后调用后端javabean来完成实际的逻辑处理: 最后转发到相应的jsp ...

  3. AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

    ERROR The request could not be satisfied. Bad request. Generated by cloudfront (CloudFront) Request ...

  4. Context.js 右键菜单

    ContextJS is a lightweight solution for contextual menus. Currently, there are two versions. The fir ...

  5. Skytte:一款令人印象深刻的 HTML5 射击游戏

    Skytte 是一款浏览器里的 2D 射击游戏.使用 Canvas 元素和大量的 JavaScript 代码实现.Skytte 是用我们的开源和现代的前端技术创造的.经典,快节奏的横向滚动射击游戏,探 ...

  6. 使用nodejs+express+socketio+mysql搭建聊天室

    使用nodejs+express+socketio+mysql搭建聊天室 nodejs相关的资料已经很多了,我也是学习中吧,于是把socket的教程看了下,学着做了个聊天室,然后加入简单的操作mysq ...

  7. 【经验之谈】前端面试知识点总结(CSS相关)——附答案

    目录 二.CSS部分 1.解释一下CSS的盒子模型? 2.请你说说CSS选择器的类型有哪些,并举几个例子说明其用法? 3.请你说说CSS有什么特殊性?(优先级.计算特殊值) 4.要动态改变层中内容可以 ...

  8. JavaScript事件对象

    一. 事件对象 事件处理三部分组成:对象.事件处理函数=函数.例如:单击文档任意处. 1.鼠标按钮 非 IE(W3C)中的 button 属性 0 表示主鼠标按钮(常规一般是鼠标左键) 1 表示中间的 ...

  9. 【初探移动前端开发05】jQuery Mobile (整合版)

    前言 为了方便大家看的方便,我这里将这几天的东西整合一下发出. 里面的例子请使用手机浏览器查看. 什么是jQuery Mobile? jquery mobile是jquery在移动设备上的版本,他是基 ...

  10. C#各种数组直接的数据复制/转换

    之前做Opengl程序,用的的C#的SharpGL这个库,里面有各种奇怪绑定的函数,比如原型为: void glInterleavedArrays(uint format, int stride, v ...