python简单爬虫定时推送同花顺直播及荐股至邮箱

  • 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

    效果展示

时间: 2024-10-11 00:37:50

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

【WebSocket】---实现定时推送比特币交易信息

实现定时推送比特币交易信息 实现功能:跟虚拟币交易所一样,时时更新当前比特币的价格,最高价,最低价,买一价等等...... 提示:(1)本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocket]---实现游戏公告功能. (2)相关源码会在其它有关websocket案例写完,写在gitHub上,后期会贴上地址. 先看效果演示 当前的信息就是虚拟币交易所最新BTC的数据信息. 我们看到每隔1秒都会更新一次最新的比特币当前信息.(截止到我发这篇博客时,比特币当前价格:6473美元左右) 一.

Python 简单爬虫

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 import os import time import webbrowser as web import random count = random.randint(20,40) j = 0 while j < count:     i = 0     while i <= 5:         web.open_new_tab('http://www.cnblogs.com/evilxr/p/37642

Python PyAPNs 实现消息推送

首先是一些解决问题时查阅过的参考资料,希望对大家有所帮助,减少花在这上面的时间. 苹果推送服务配置教程 IOS开发者中心 使用pyapns实现APNS推送 苹果信息推送服务 (这是另外一个pyapns,需要用twised.我试过了,python运行无错误但推送没反应,查看twised.log发现是一个什么clean up的错误.查StackOverflow无果,就没再弄下去了,如果有人成功请留言告诉我谢谢) 1.申请证书 这部分网上资源挺多的,随便找一下就能找到. 实用工具->钥匙串访问 这两个

Python简单爬虫入门二

接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们BeautifulSoup的基本结构如下 #!/usr/bin/env python # -*-coding:utf-8 -*- from bs4 import BeautifulSoup import requests headers = { 'User-Agent':'Mozilla/5.0 (Win

Python简单爬虫第六蛋!(完结撒花)

第六讲: 今天我们来实战一个项目,我本人比较喜欢看小说,有一部小时叫<圣墟>不知道大家有没有听说过,个人觉得还是不错的,现在联网的时候,都可以随时随地用手机打开浏览器搜索查看,但是有时候也会遇到没有网络的情况,这个就很扎心了,有什么办法呢?所以这个项目基于这么一个现实背景来分析实现一下,把我们前几次讲到一些技术方法都运用一遍. (有人可能会说直接下载一个txt格式的小说文本文件不就好了,虽然是挺方便的,但是懒惰是不好的习惯,而且也没有运用到所学的知识,那么我们何必要学习呢?为什么要学,看完实例

QuickBI助你成为分析师-邮件定时推送

摘要: 创建报表过程中经常需要将报表情况定时推送给其他用户,及时了解数据情况,目前高级版提供了邮件定时推送功能,请参考本文. 创建报表过程中经常需要将报表情况定时推送给其他用户,及时了解数据情况.高级版本邮件推送功能支持仪表板周期性推送到订阅人,默认以当前登录者视角查看,同时支持结合 行级权限进行权限控制 和 结合全局参数功能确定邮件推送内容参数,具体操作步骤如下: 步骤一 设置行级权限 如下图为当前登录者设置行级权限,则邮件推送仪表板截图基于此权限展示: 行级权限设置详情请参考:行级权限设置

Python 简单爬虫案例

Python 简单爬虫案例 import requests url = "https://www.sogou.com/web" # 封装参数 wd = input('enter a word') param = { 'query':wd } response = requests.get(url=url,params=param) page_text = response.content fileName = wd+'.html' with open(fileName,'wb') as

微星极光公众号激活宝——微信公众号48小时内无限制定时推送消息

前言 凡是运营过公众号的人都知道,微信公众号分为订阅号和服务号,订阅号一天群发一次,服务号一月才四次,对于许多运营的公众号来说这次数远远不够用,最近发现微星极光推出了一个新功能:公众号激活宝,通过微信内部接口实现48小时内无限制向用户推送消息的功能 Q1:48小时信息推送可以实现无限制向用户推送消息吗? 答:可以,但是只能对48小时内与公众号互动的粉丝群发信息,这里的互动是指对话,扫码,关注,点菜单,只要满足其中一个动作均算作互动. Q2:48小时信息推送的内容有哪些? 答:没有数量限制地推送文

python简单爬虫

爬虫真是一件有意思的事儿啊,之前写过爬虫,用的是urllib2.BeautifulSoup实现简单爬虫,scrapy也有实现过.最近想更好的学习爬虫,那么就尽可能的做记录吧.这篇博客就我今天的一个学习过程写写吧. 一  正则表达式 正则表达式是一个很强大的工具了,众多的语法规则,我在爬虫中常用的有: . 匹配任意字符(换行符除外) * 匹配前一个字符0或无限次 ? 匹配前一个字符0或1次 .* 贪心算法 .*? 非贪心算法 (.*?) 将匹配到的括号中的结果输出 \d 匹配数字 re.S 使得.