# pip install bs4
from bs4 import BeautifulSoup # python 爬虫利器
"""
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.
它能够通过你喜欢的转换器实现惯用的文档导航,查找,
修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
"""
import requests
blog_url = 'https://blog.51cto.com/13118411/2154806'
data = requests.get(blog_url)
print(data)
print(data.text)
天气预报定制-cooperfang的博客-51CTO博客
天气预报定制
# api aplication programming interface
# 不通软件不同系统之间的功能相互调用
# json是其中重要的一种数据交换形式
# 定制天气预报 https://www.sojson.com/open/api/weather/json.shtml?city=
# http://jsonviewer.stack.hu/
# https://www.sojson.com/open/api/weather/json.shtml
?city=%E5%8C%97%E4%BA%AC
import requests # pip install requests 请求 网上api的调用形式
url = 'https://www.sojson.com/open/api/weather/json.shtml?city='
city = '北京'
ret = requests.get(url + city) # 请求的对象
print(ret.json())
{'date': '20180804', 'message': 'Success !', 'status': 200, 'city': '北京', 'count': 9, 'data': {'shidu': '70%', 'pm25': 44.0, 'pm10': 78.0, 'quality': '良', 'wendu': '30', 'ganmao': '极少数敏感人群应减少户外活动', 'yesterday': {'date': '03日星期五', 'sunrise': '05:13', 'high': '高温 36.0℃', 'low': '低温 26.0℃', 'sunset': '19:27', 'aqi': 107.0, 'fx': '南风', 'fl': '<3级', 'type': '晴', 'notice': '愿你拥有比阳光明媚的心情'}, 'forecast': [{'date': '04日星期六', 'sunrise': '05:14', 'high': '高温 36.0℃', 'low': '低温 27.0℃', 'sunset': '19:26', 'aqi': 97.0, 'fx': '南风', 'fl': '<3级', 'type': '晴', 'notice': '愿你拥有比阳光明媚的心情'}, {'date': '05日星期日', 'sunrise': '05:15', 'high': '高温 35.0℃', 'low': '低温 25.0℃', 'sunset': '19:25', 'aqi': 103.0, 'fx': '东南风', 'fl': '<3级', 'type': '雷阵雨', 'notice': '带好雨具,别在树下躲雨'}, {'date': '06日星期一', 'sunrise': '05:16', 'high': '高温 31.0℃', 'low': '低温 25.0℃', 'sunset': '19:24', 'aqi': 97.0, 'fx': '南风', 'fl': '<3级', 'type': '雷阵雨', 'notice': '带好雨具,别在树下躲雨'}, {'date': '07日星期二', 'sunrise': '05:17', 'high': '高温 31.0℃', 'low': '低温 25.0℃', 'sunset': '19:22', 'aqi': 113.0, 'fx': '西南风', 'fl': '<3级', 'type': '雷阵雨', 'notice': '带好雨具,别在树下躲雨'}, {'date': '08日星期三', 'sunrise': '05:18', 'high': '高温 30.0℃', 'low': '低温 24.0℃', 'sunset': '19:21', 'aqi': 68.0, 'fx': '东南风', 'fl': '<3级', 'type': '雷阵雨', 'notice': '带好雨具,别在树下躲雨'}]}}
# 象字典一样取值
d = ret.json()
# print(d['status'])
# print(d['city'])
# print(d['data'])
# print(d['data']['yesterday'])
def hot_weather(data):
"""定制化天气预报"""
try:
weather_list = data['data']['forecast']
# print(weather_list)
for day in weather_list:
print(day['date'], day['high'], day['low'], day['sunset'], day['notice'])
except Exception as e:
print(e)
hot_weather(d)
04日星期六 高温 36.0℃ 低温 27.0℃ 19:26 愿你拥有比阳光明媚的心情
05日星期日 高温 35.0℃ 低温 25.0℃ 19:25 带好雨具,别在树下躲雨
06日星期一 高温 31.0℃ 低温 25.0℃ 19:24 带好雨具,别在树下躲雨
07日星期二 高温 31.0℃ 低温 25.0℃ 19:22 带好雨具,别在树下躲雨
08日星期三 高温 30.0℃ 低温 24.0℃ 19:21 带好雨具,别在树下躲雨
%cd D:\全栈\json api
d = ret.json()
import json
with open('weather.json', 'w') as f:
json.dump(d, f)
D:\全栈\json api
©著作权归作者所有:来自51CTO博客作者cooperfang的原创作品,如需转载,请注明出处,否则将追究法律责任
contents = BeautifulSoup(data.text, 'html.parser') # data.text博客文本,html.parser这个类自带的功能
# print(contents) 输出更标准化
all_p = contents.find_all('p') # 寻找p标签
all_text = ''
for p in all_p:
# print(p.text)
all_text += str(p.text) # 拼接成一个句子
print(all_text)
扫一扫体验手机阅读0分享收藏Ctrl+Enter 发布发布取消0
# pip install jieba 对中文进行拆解为独立的词语
import jieba
text = jieba.cut(all_text) # jieba.cut()
"""
Signature: jieba.cut(sentence, cut_all=False, HMM=True)
Docstring:
The main function that segments an entire sentence that contains
Chinese characters into seperated words.
"""
text_list= []
for t in text:
print(t)
text_list.append(t)
Building prefix dict from the default dictionary ...
Dumping model to file cache C:\Users\coop\AppData\Local\Temp\jieba.cache
Loading model cost 1.107 seconds.
Prefix dict has been built succesfully.
扫一扫
体验
手机
阅读
0
分享
收藏
Ctrl
+
Enter
发布
发布
取消
0
import collections # python 内置的api,以上jieba也可叫做api,收集
count = collections.Counter(text_list) # 产生一个对象count
for key, val in count.most_common(30):
# 有序(返回前n个出现次数最多的)
print(key, val)
0 2
发布 2
扫一扫 1
体验 1
手机 1
阅读 1
分享 1
收藏 1
Ctrl 1
+ 1
Enter 1
1
取消 1
# 做接口 可以给被人这个py文件,也可以是个链接
import collections
def get_most_common(text_list, max_num = 30):
"""根据max_num取排名靠前的词和出现次数"""
ret = {'status':0, "statusText":'ok', 'data':{}} # api通用格式
try:
new_list = list(text_list)
count = collections.Counter(new_list)
ret['data'] = count.most_common(max_num)
except Exception as e:
ret['status'] = 1
ret['statusText'] = e
return ret
get_most_common(text_list)
{'status': 0,
'statusText': 'ok',
'data': [('0', 2),
('发布', 2),
('扫一扫', 1),
('体验', 1),
('手机', 1),
('阅读', 1),
('分享', 1),
('收藏', 1),
('Ctrl', 1),
('+', 1),
('Enter', 1),
('\xa0', 1),
('取消', 1)]}
本文题目:词频统计
文章来源:
http://scpingwu.com/article/jcephs.html
Ctrl+Enter 发布
发布
取消