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):self.url = urlself.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).textt_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:passreturn 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:passs = 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"]=submsg["From"]= memsg["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()returnTrueexceptException, e:print str(e)returnFalse
效果展示

python简单爬虫定时推送同花顺直播及荐股至邮箱的更多相关文章
- 后端利用Redis队列及哈希实现定时推送提醒的三个思路
周煦辰 2016年8月31日 本文介绍了一下本人在开发过程中遇到"定时推送提醒"的需求的时候所思考的三种解决方案. 明确问题 首先明确一下这个需求可能包含的几个"坑&qu ...
- 通过server酱实现定时推送天气情况,再不用担心你的糊涂蛋女友忘带伞了~~
昨天菜鸟小白给大家留了一个课后作业,如何实现天气的定时推送.有没有小伙伴做出来答案呢?今天菜鸟小白给大家分享我的实现方式吧.这个是我今天整的程序流程图,昨天我们还只是实现了中间的通过和风天气API获取 ...
- WebSocket(4)---实现定时推送比特币交易信息
实现定时推送比特币交易信息 实现功能:跟虚拟币交易所一样,时时更新当前比特币的价格,最高价,最低价,买一价等等...... 提示:(1)本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocke ...
- 使用flask_socketio实现服务端向客户端定时推送
websocket连接是客户端与服务器之间永久的双向通信通道,直到某方断开连接. 双向通道意味着在连接时,服务端随时可以发送消息给客户端,反之亦然,这在一些需要即时通讯的场景比如多人聊天室非常重要. ...
- Docker 部署 _实现每日情话 定时推送(apscheduler)
由于最近工作比较忙,后续博客可能更新不及时,哈哈 前言: 由于python对于微信推送不够友好,需要扫码登录,短信接口需要RMB.我就想到了qq邮箱发送到好友,然而微信有qq邮箱提醒功能,就实现了我需 ...
- Python简单爬虫入门三
我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...
- Python简单爬虫入门二
接着上一次爬虫我们继续研究BeautifulSoup Python简单爬虫入门一 上一次我们爬虫我们已经成功的爬下了网页的源代码,那么这一次我们将继续来写怎么抓去具体想要的元素 首先回顾以下我们Bea ...
- GJM : Python简单爬虫入门(二) [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 用 Go 编写一个简单的 WebSocket 推送服务
用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...
随机推荐
- Verilog学习笔记简单功能实现(四)...............译码器和编码器
这里以简单的3-8译码器和8-3编码器为例: module decoder3_8(a,out); :]a; :]out; 'b1<<a;/*把最低位的1左移in位(根据in口输入的值)并赋 ...
- BZOJ 2467 解题报告
对于一个合格的程序员来说,掌握一定的数学知识是非常必要的,所以这次就开个数学专题玩玩. 不多说啥,上题目,我们直接分析题目! 首先ORZ stonepage神犇,一眼就看出我把快速幂写成快速乘了…… ...
- GJM :用JIRA管理你的项目(二)JIRA语言包支持及插件支持 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
- 【position也可以很复杂】当弹出层遇上了鼠标定位(下)
前言 接着昨天的内容写,为了保证内容连续性,这里还是把昨天的内容拷了过来. 请用现代浏览器测试 引出问题 有图有真相,我们来看一个智联招聘里面经常出现的图层: 他这个是没有什么问题的,我们来简单看看其 ...
- JavaScript常用技巧总结(持续添加中...)
在我学习过程中收集的一些常用技巧: typeof x !== undifined 判断x是否已定义: x === Object(x) 判断x是否为对象: Object.keys(x).length ...
- 简单代码在ABAP中实现声音的播放
这段代码的功能是在SAP里面实现声音的播放,可以用作程序提醒功能,和SAP里面’噹噹噹’那个声音的意思差不多.将来在项目中遇到客户想要SAP ABAP发出一点声音的时候就可以参考一下这个程序. REP ...
- Shapely中的几何图形操作
Geometric Objects object.area Returns the area (float) of the object. object.bounds Returns a (minx, ...
- 详细对比IB开发与纯手码开发的优劣。
1.IB是什么? Interface Builder 是一种通过图形化界面搭建UI的方式,并把窗口.菜单栏以及窗口上的各种控件的对象都“冻结”在了一个 NIB文档里:程序运行时,这些对象将会“苏醒”. ...
- 图解六大UML类图关系
在学习UML类图的过程中,UML类图关系是必须要掌握的问题,UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.下面对其定义和表示方法逐一说明. UML类图关系简介 依赖(Dependen ...
- Android 创建自己的Camera App
在sdk中找到/sdk/docs/guide/topics/media/camera.html#custom-camera,里面有详细的api参考 在清单文件中添加相应的权限: <uses-pe ...