前言
因要研究一下经济和舆情,所以需要原始的数据,通常来说,信息的摘要已经足够,而且信息格式规整不需要进行复杂的清洗。
本程序采用json格式来保存数据因此该程序可以便捷地进行更改,只保存自己需要的部分,或者设为开机启动和定时启动,来更新自动的数据库。
一、思路
数据来源
原网站网址:http://finance.sina.com.cn/7x24/
网站的数据来源:Request URL: http://zhibo.sina.com.cn/api/zhibo/feed?callback=jQuery111209642919567773593_1582017910555&page=1&page_size=20&zhibo_id=152&tag_id=0&dire=f&dpc=1&pagesize=20&id=1622305&type=1&_=1582017910576/
简化后:http://zhibo.sina.com.cn/api/zhibo/feed?&page=%1&page_size=100&zhibo_id=152/
新浪提供了2014年3月5日至今的数据,可以根据自己的需要进行下载相关的数据。
分析:
每一篇文章都有一个唯一的id。
每一page最多可以返回最近的100条新闻。
可以通过控制page可以获取历史的新闻。
相同的page返回的不一定是相同的内容。
因此只要遍历page就可以找到自己需要下载那一日下page_code然后下载解析即可。
二、下载
1.解析函数
通过page_code返回news_list,news_list是100条新闻,每一条新闻是json格式,失败重试(可能进入死循环,或达到最大迭代次数(我没有发生过))。
def get_news_list(code):
try:
headers = {
"User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)",
}
url='http://zhibo.sina.com.cn/api/zhibo/feed?&page=%s&page_size=100&zhibo_id=152'%code
news_list=requests.get(url,headers = headers).text
news_list=json.loads(news_list)['result']['data']['feed']['list']#可以在这里选择自己需要保存的信息
if 'None'in str(type(news_list)):
news_list=get_news_list(code)
return news_list
except:
return get_news_list(code)
2.总下载+保存
def update_news_list(code,end_code=0):
news_list=get_news_list(code)
date = news_list[99]['create_time'][:10]
index=""
last_date=""
OK=False
#找到code页最后一条信息那一天最早的一篇新闻的code和index
while(not OK):
for i in range(len(news_list)-1,-1,-1):
if news_list[i]['create_time'][:10] !=date:
date=news_list[i]['create_time'][:10]
index=i
OK=True
break
if not OK:
code-=1
news_list=get_news_list(code)
#没有下载完
while(code>end_code):
news_list_all=[]
#先把最早的那一页属于date那一天储存下来
for i in range(index,-1,-1):