• 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. 用 Inkspace 做 SVG 给 TPath

    FireMonkey 里的 TPathData 支持 SVG 的基本绘图指令,因此可以运用 Inkspace 软件,提取 SVG 的绘图内容,请见图片说明:

  2. tps (事务处理系统)

    事务处理系统:Transaction processing systems (TPS) 提高事务处理效率与保证其正确性 在数据(信息)发生处将它们记录下来 通过OLTP产生新的信息 将信息保存到数据库 ...

  3. python 学习笔记5(深浅拷贝与集合)

    拷贝 我们已经详细了解了变量赋值的过程.对于复杂的数据结构来说,赋值就等于完全共享了资源,一个值的改变会完全被另一个值共享. 然而有的时候,我们偏偏需要将一份数据的原始内容保留一份,再去处理数据,这个 ...

  4. PHP 批量生成静态文件目录代码

    <?php /** * @author:jiangzaixing 20160314 * 获取静态文件方法 */ class StaticFile { const MAP_FILE_NAME = ...

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

    版权声明:本文原创发表于 [请点击连接前往] ,未经作者同意必须保留此段声明!如有侵权请联系我删帖处理! 为大家介绍一个简单的爬虫工具BeautifulSoup BeautifulSoup拥有强大的解 ...

  6. Smint – 用于单页网站制作的 jQuery 导航菜单插件

    Smint 是一款用于实现单页风格网站的 jQuery 导航插件,包含两部分:固定在页面顶部的精美导航条和能够在你点击的时候自动滚动到对应内容的菜单按钮.Smint 使用非常简单,只有一个参数用于设置 ...

  7. Face++ – 提供给你实时的脸部识别 API

    Face++ 是一个小巧,功能强大,跨平台的服务,由Megvii公司建立,致力于建立一个新的视觉平台.它使用计算机视觉尖端科技和数据挖掘,提供3个核心视觉服务(探测,识别和分析).基于 Face++ ...

  8. (转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)

     JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)         函数节流,简单地讲,就是让一个函数无法在很短的时间间隔内连续调用,只有当上一次函数执行后过 ...

  9. C#开源项目汇总

    Discuz nt: 一个开源的论坛项目.估计你现在逛过大大小小的论坛没有成百上千,也有几十个吧,其中是个论坛6个以上都是Discuz(以前大部分都是php版的),现 在官方也早就放出了DotNet( ...

  10. 由Vue引发的getter和setter思考

    公司的新项目决定使用Vue.js来做,当我打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vu ...