1、获取新浪新闻的标题以及要闻,保存到txt中(目录以及文件名可以自定义);
2、新闻包括国内新闻、国际新闻、社会新闻(依据提示选择);
3、运行环境,python2.7、win8.1(64位)、IDE(pycharm4.5)。
声明:仅用作学习交流
=以下是完整代码========
#coding:UTF-8
import json
import re
import os
import requests
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
def get_pages(newclass):
'''获取该类新闻的总页数'''
page = 1
url = 'http://api.roll.news.sina.com.cn/zt_list?'
params = {'channel':'news',
'cat_1':newclass,
'cat_2':'',
'level':'',
'show_ext':'1',
'show_all':'1',
'show_num':'1000',
'tag':'1',
'format':'json',
'page':page
}
html = requests.get(url,params=params).content
total = int(re.findall('"total":"(.*?)"',html)[0]) #获取该类新闻总条数
#由每次请求1000条新闻,计算出总页数
if total%1000 != 0:
pages = (total/1000) + 1
else:
pages = total/1000
return pages
def get_new(newclass='gnxw',page=1):
'''获取新闻标题与要闻'''
new = []
url = 'http://api.roll.news.sina.com.cn/zt_list?'
params = {'channel':'news',
'cat_1':newclass,
'cat_2':'',
'level':'',
'show_ext':'1',
'show_all':'1',
'show_num':'1000',#每次请求1000个数据
'tag':'1',
'format':'json',
'page':page
}
html = requests.get(url,params=params).content
html = re.findall('\[\{(.*?)\}\]',html)[0]
html = html.split('},{')
for s in html:
s = '{' + s + '}'
s = json.loads(s)
#标题(title)与要闻用空格隔开保存到列表new里
new.append(s['title'].replace('\n','')+' '+s['ext5'].replace('\n','')+'\n')
return new
def Svae_new(page,path='D:/News/',filename='new.txt'):
'''保存新闻到txt文档里面'''
if not os.path.exists(path):
os.mkdir(path)
f = open(path+filename,'a')
new = get_new(newclass,page)
for i in new:
f.write(i)
f.close()
print str(page)+'/'+str(pages)
print u'''
========================
0:国内新闻
1:国际新闻
2:社会新闻
========================'''
news = ['gnxw','gjxw','shxw']
newclass = news[input(u'请输入数字获取对应新闻:')]
pages = get_pages(newclass)
for page in range(1,pages+1):
Svae_new(page,filename=newclass+'.txt')
==================================================================
在对应文件夹下得到以下文件(信息量还是很大的,我这里仅仅抓取一部分):
欢迎访问我的个人站点:http://bgods.cn/