1.獲取東方財富研報列表中屬于超預(yù)期的研報
2.郵件發(fā)送
import requests
import re
import json
import smtplib
from jinja2 import Environment, FileSystemLoader
from email.mime.text import MIMEText
from email.utils import formataddr
from retrying import retry
import schedule
import time
import tushare as ts
SendedList = [] # 已發(fā)送列表
# base params
base_url = 'http://datainterface.eastmoney.com//EM_DataCenter/js.aspx'
base_cookie = 'emstat_bc_emcount=37889085062188945262; st_pvi=34681393574450; _ga=GA1.2.1970903645.1486349341; HAList=a-sz-002362-%u6C49%u738B%u79D1%u6280%2Ca-sz-000807-%u4E91%u94DD%u80A1%u4EFD%2Ca-sz-300288-%u6717%u739B%u4FE1%u606F%2Ca-sz-300466-%u8D5B%u6469%u7535%u6C14%2Ca-sh-600996-%u8D35%u5E7F%u7F51%u7EDC%2Ca-sz-000713-%u4E30%u4E50%u79CD%u4E1A; em_hq_fls=old; emstat_ss_emcount=3_1511216938_603191144; qgqp_b_id=5033d538a451b91de2b58f645b83b1f6; st_si=81586899525171'
base_headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept - Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Cache-Control': 'max-age=0',
'Connection': 'Keep-Alive',
'Host': 'datainterface.eastmoney.com',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
def getstockgains(stockcode, start, end):
df = ts.get_hist_data(stockcode, start, end)
return df
# 郵件發(fā)送
@retry
def mail(msgcontent):
ret = True
try:
msg = MIMEText(msgcontent, 'html', 'utf-8')
# 括號里的對應(yīng)發(fā)件人郵箱昵稱、發(fā)件人郵箱賬號
msg['From'] = formataddr(["From平凡啊菜", my_sender])
# 括號里的對應(yīng)收件人郵箱昵稱、收件人郵箱賬號
msg['To'] = formataddr(["平凡啊菜", recipients[0]])
msg['Subject'] = "研報超預(yù)期列表" # 郵件的主題,也可以說是標(biāo)題
server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 發(fā)件人郵箱中的SMTP服務(wù)器,端口是25
server.login(my_sender, my_pass) # 括號中對應(yīng)的是發(fā)件人郵箱賬號、郵箱密碼
# 括號中對應(yīng)的是發(fā)件人郵箱賬號、收件人郵箱賬號、發(fā)送郵件
server.sendmail(
my_sender, recipients[0], msg.as_string())
server.quit()
except Exception:
ret = False
return ret
@retry
def getReportData(mp):
base_params = {'type': 'SR', 'sty': 'GGSR',
'js': 'var allResult={"data":[(x)],"pages":"(pc)","update":"(ud)","count":"(count)"}', 'ps': 50,
'p': mp, 'mkt': 0, 'stat': 0, 'cmd': 2, 'code': '', 'rt': 50436030}
s = requests.Session()
rval = s.get(base_url, params=base_params, timeout=300)
# print(rval.text)
if rval.status_code == 200:
# print('請求結(jié)果:%s' % rval.text)
match = re.search(r'allResult={(.+)}', rval.text)
# print('match:%s' % match)
reportinfo = ''
if match:
reportinfo = str(match.group(1))
# print('reportinfo:%s' % reportinfo)
reportinfo = '{' + reportinfo + '}'
# print(reportinfo)
decodejson = json.loads(reportinfo)
# print('json:%s' % decodejson)
return decodejson
def filterbestreports():
# print('do filter best reports job.')
filterlist = []
pages = 2
mindex = 1
while mindex <= pages:
reports = getReportData(mindex)
pages = int(reports['pages'])
for item in reports['data']:
# print(item)
if str(item['title']).find('超預(yù)期') != -1:
if item in SendedList:
# print('sendedlist find:%s' % item)
continue
filterlist.append(item)
print('代碼:%s,名稱:%s,研報:%s,機(jī)構(gòu):%s,日期:%s' % (item['secuFullCode'], item[
'secuName'], item['title'], item['insName'], item['datetime']))
mindex = mindex + 1
# print('搜索到第%s/%s頁' % (mindex, pages))
if len(filterlist) != 0:
env = Environment(loader=FileSystemLoader('template'))
email_temp = env.get_template('eastmoney_reports.html')
html = email_temp.render(results=filterlist)
success = mail(html)
if success:
SendedList.extend(filterlist)
def main():
filterbestreports()
schedule.every(1800).seconds.do(filterbestreports)
while True:
schedule.run_pending()
time.sleep(1)
if __name__ == '__main__':
my_sender = 'xxxx@qq.com' # 發(fā)件人郵箱賬號
my_pass = '' # 發(fā)件人郵箱授權(quán)碼
# 收件人郵箱賬號
recipients = ['xxx@qq.com', 'xxxx@qq.com']
main()
強(qiáng)烈推薦文章:
2020年4月至6月凈利潤斷層實戰(zhàn)小結(jié)-真香~