python打印输出12星座_Python采集12星座信息,分析出12星座的各个特点
一个微博热搜引发的故事一、故事从这里开始
二、搞事情第一步:搜集图片
三、搞事情第二步:展示图片
四、搞事情第三步:推广链接
五、搞事情第四步:统计分析
1.数据处理2.数据筛选3.统计各天的频率4.统计星座的频率5.统计月份的频率6.数据可视化(3个条形图)
写在最后
私信小编01即可获取大量Python学习资料
一、故事从这里开始
3月29日那晚,我正在厕所蹲坑来着,大概就是边蹲边刷手机的那种…突然发现一条微博热搜#你出生那天的宇宙#
在评论区,发现大家都有一个同样的疑惑:无法访问NASA官网(可能是因为访问量过大,导致网络极高延时)。作为一个社会主义正直青年,我怎么能放着不管呢?
于是,我决定搞事情!!
二、搞事情第一步:搜集图片
一个简单的想法油然而生:既然大家没法从官网上下载图片,那我就帮大家集齐图片,然后发给大家就好啦。(搜集数据嘛,写个爬虫不就好了?)
于是,我直接冲进NASA官网准备分析一波请求。结果…好叭,我也是大家中的一员,我也加载不出图片。
这点困难我怎么能退缩呢,再于是,我就去微博评论下面苦苦寻找,果然功夫不负有心人,发现豆瓣上有个大佬已经为找齐了所有图片:
秉承“拿来主义”的作风,我决定这里就是我的数据源(某豆瓣相册)
简单分析了一下,发现可以通过一个m_start的参数进行翻页,每页20张图片(如m_start=0为第一页,m_start=20为第二页),那么写一个循环便可:import re
import queue
import requests
import threading
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
headers = {
'Host': 'www.douban.com',
'Connection': 'keep-alive',
'Cache-Control': 'max-age=0',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36',
'Sec-Fetch-Dest': 'document',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-User': '?1',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cookie': 'bid=rb_kUqiDS6k; douban-fav-remind=1; _pk_ses.100001.8cb4=*; ap_v=0,6.0; __utma=30149280.1787149566.1585488263.1585488263.1585488263.1; __utmc=30149280; __utmz=30149280.1585488263.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); __yadk_uid=HNoH1YVIvD2c8HrQDWHRzyLciFJl1AVD; __gads=ID=a1f73d5d4aa31261:T=1585488663:S=ALNI_MafqKPZWHx0TGWTpKEm8TTvdC-eyQ; ct=y; _pk_id.100001.8cb4=722e0554d0127ce7.1585488261.1.1585488766.1585488261.; __utmb=30149280.10.6.1585488263'
}
# driver初始化
chrome_options = Options()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(options=chrome_options)
# 下载图片
def downimg():
while not img_queue.empty():
img = img_queue.get()
img_name = img[0]
url = img[1]
res = requests.get(url)
data =res.content
with open('./img/%s.webp'%img_name,'wb') as f:
f.write(data)
print(img_name)
# 网站参数
url_o = 'https://www.douban.com/photos/album/1872547715/?m_start=%d'
# 爬取连接
img_queue = queue.Queue()
for i in range(0,21):
url = url_o%(18*i)
driver.get(url)
es = driver.find_elements_by_class_name('photo_wrap')
for e in es:
img_e = e.find_element_by_tag_name('img')
img_url = img_e.get_attribute('src')
img_url = img_url.replace('photo/m/public','photo/l/public') # 替换为大图
text_e = e.find_element_by_class_name('pl')
img_date = text_e.text
img_queue.put((img_date,img_url))
print('%d页爬取完成'%(i+1))
driver.close()
# 下载图片
thread_list = []
N_thread = 5
for i in range(N_thread):
thread_list.append(threading.Thread(target=downimg))
for t in thread_list:
t.start()
for t in thread_list:
t.join()
代码简单来说就是:webdriver访问页面并获取图片地址,然后通过多线程利用requests下载并保存图片。
至此,图片搜集的工作基本完成!
三、搞事情第二步:展示图片
有了图片,接下来就是如何让大家获得图片呢?去给每个人私发?机智的我当然不会这么干,我决定写一个小网页来让大家访问。作为很不专业的我,东平西凑,效果大概就是这样(你生日那天的宇宙):
四、搞事情第三步:推广链接
关于推广,咱也不懂,咱也不敢说。 傻傻的我决定自己发一条微博(心里大概是想:这么方便的工具,肯定会受大家欢迎的,肯定是这样没有错,对,没错…):
现实嘛,总是残酷的。吃瓜群众都猜到了:无人问津,石沉海底~
几经周折,最后呢在一位相关话题的热门博主的鼎力帮助下,最终迎来了一些流量:
五、搞事情第四步:统计分析
虽然这个流量跟我想象的还是相差甚远,毕竟这个话题也是有上亿的阅读量的,但是我还是决定对昨天访问的情况做一个简单的统计:
1.数据处理
在某度统计里拿到网页访问数据的原始csv表格后,进行了简单数据处理,调整为更方便读取的格式。
2.数据筛选
由于表格中并不仅仅包括NASA页面的数据,还有一些其他页面的数据,于是必须进行数据的筛选:# 读取数据
data = pd.read_csv('./analyze/20200330-20200330.csv',encoding='utf-8')
# 筛选数据(和NASA相关且有有效日期的数据)
data_NASA = []
for i in range(len(data)):
url = urllib.parse.unquote(data['URL'][i])
pv = data['PV'][i] # 浏览量
uv = data['UV'][i] # 访客量
#if url[-1] == '日' and 'NaN' not in url: # 为NASA访问页面
if 'date=' in url and 'NaN' not in url:
try:
data_NASA.append((re.findall('date=(\d*?月\d*?日)',url)[0],pv,uv))
except:
pass
3.统计各天的频率# 统计各个天数的频率
PV_map= {}
UV_map = {}
PV_total = 0
UV_total = 0
for d in data_NASA:
if d[0] not in PV_map.keys():
PV_map[d[0]] = 0
UV_map[d[0]] = 0
PV_map[d[0]] += d[1] # PV
UV_map[d[0]] += d[2] # UV
PV_total += d[1]
UV_total += d[2]
for k in PV_map.keys(): # 计算频率
PV_map[k] = PV_map[k]/PV_total*100
UV_map[k] = UV_map[k]/UV_total*100
PVs= sorted(PV_map.items(),key=lambda x:x[1],reverse=True) # 排序
UVs= sorted(UV_map.items(),key=lambda x:x[1],reverse=True) # 排序
4.统计星座的频率# 判断星座
def get_xingzuo(month, date):
dates = (21, 20, 21, 21, 22, 22, 23, 24, 24, 24, 23, 22)
constellations = ("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座")
if date < dates[month-1]:
return constellations[month-1]
else:
return constellations[month]
# 统计各星座的频率
xingzuo = ("摩羯座", "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座")
xingzuo_map = {}
for x in xingzuo:
xingzuo_map[x] = 0
xingzuo_total = 0
for d in data_NASA:
month = int(re.findall('(\d*?)月(\d*?)日',d[0])[0][0])
day = int(re.findall('(\d*?)月(\d*?)日',d[0])[0][1])
x = get_xingzuo(month,day)
#xingzuo_map[x] += d[1] # PV
xingzuo_map[x] += d[2] # UV
xingzuo_total += d[2]
for k in xingzuo_map.keys():
xingzuo_map[k] = xingzuo_map[k]/xingzuo_total*100
xingzuos= sorted(xingzuo_map.items(),key=lambda x:x[1],reverse=True) # 排序
5.统计月份的频率# 统计各月份的频率
month = [str(i)+'月' for i in range(1,13)]
month_map = {}
for m in month:
month_map[m] = 0
month_total = 0
for d in data_NASA:
m = d[0].split('月')[0]+'月'
#month_map[m] += d[1] # PV
month_map[m] += d[2] # UV
month_total += d[2]
for k in month_map.keys():
month_map[k] = month_map[k]/month_total*100
months= sorted(month_map.items(),key=lambda x:x[1],reverse=True) # 排序
6.数据可视化(3个条形图)## 生日查询TOP10-按访客量UV
date = []
uv = []
for i in UVs:
date.append(i[0])
uv.append(i[1])
top10_date = date[:10]
top10_date.reverse()
top10_uv = uv[:10]
top10_uv.reverse()
fig, ax = plt.subplots() # 画图
b = plt.barh(top10_date,top10_uv,color='#6699CC') # 金色#FFFACD 银色#C0C0C0 橙色#FFA500 蓝色#6699CC
i = len(b)
for rect in b: # 画数值
if i==3: # 第三名
rect.set_facecolor('#FFA500') # 橙色
if i==2: # 第二名
rect.set_facecolor('#C0C0C0') # 银色
if i==1: # 第一名
rect.set_facecolor('#FFFACD') # 金色
w = rect.get_width()
ax.text(w, rect.get_y()+rect.get_height()/2, ' %.2f%%'%w,ha='left', va='center')
i -= 1
plt.xticks([]) # 关掉横坐标
## 星座查询排名
name = []
v = []
for i in xingzuos:
name.append(i[0])
v.append(i[1])
name.reverse()
v.reverse()
fig, ax = plt.subplots() # 画图
b = plt.barh(name,v,color='#6699CC') # 金色#FFFACD 银色#C0C0C0 橙色#FFA500 蓝色#6699CC
i = len(b)
for rect in b: # 画数值
if i==3: # 第三名
rect.set_facecolor('#FFA500') # 橙色
if i==2: # 第二名
rect.set_facecolor('#C0C0C0') # 银色
if i==1: # 第一名
rect.set_facecolor('#FFFACD') # 金色
w = rect.get_width()
ax.text(w, rect.get_y()+rect.get_height()/2, ' %.2f%%'%w,ha='left', va='center')
i -= 1
plt.xticks([]) # 关掉横坐标
## 月份查询排名
name = []
v = []
for i in months:
name.append(i[0])
v.append(i[1])
name.reverse()
v.reverse()
fig, ax = plt.subplots() # 画图
b = plt.barh(name,v,color='#6699CC') # 金色#FFFACD 银色#C0C0C0 橙色#FFA500 蓝色#6699CC
i = len(b)
for rect in b: # 画数值
if i==3: # 第三名
rect.set_facecolor('#FFA500') # 橙色
if i==2: # 第二名
rect.set_facecolor('#C0C0C0') # 银色
if i==1: # 第一名
rect.set_facecolor('#FFFACD') # 金色
w = rect.get_width()
ax.text(w, rect.get_y()+rect.get_height()/2, ' %.2f%%'%w,ha='left', va='center')
i -= 1
plt.xticks([]) # 关掉横坐标
最后的结果就长这个样子:
写在最后
如果可以,我亦希望在无数次键盘的敲击声中创造出所谓的“极致浪漫”~
最后,附上本次NASA活动中个人觉得比较好看的一些图片:
python打印输出12星座_Python采集12星座信息,分析出12星座的各个特点相关推荐
- python公众号文章_python采集微信公众号文章
本文实例为大家分享了python采集微信公众号文章的具体代码,供大家参考,具体内容如下 在python一个子目录里存2个文件,分别是:采集公众号文章.py和config.py. 代码如下: 1.采集公 ...
- 【Python】5行代码采集3000+上市公司信息
前言 毕业季也到了找工作的季节了,很多小伙伴都会一家一家的公司去看,这得多浪费时间啊.今天用Python教大家怎么采集公司的 信息,相信大家会很喜欢这个教程的,nice! 基本环境配置 ◾版本:Pyt ...
- python snmp采集交换机信息_Python采集12星座信息,分析出12星座的各个特点
一个微博热搜引发的故事 一.故事从这里开始 二.搞事情第一步:搜集图片 三.搞事情第二步:展示图片 四.搞事情第三步:推广链接 五.搞事情第四步:统计分析 1.数据处理2.数据筛选3.统计各天的频率4 ...
- Python采集12星座信息,分析出12星座的各个特点
一个微博热搜引发的故事 一.故事从这里开始 二.搞事情第一步:搜集图片 三.搞事情第二步:展示图片 四.搞事情第三步:推广链接 五.搞事情第四步:统计分析 1.数据处理2.数据筛选3.统计各天的频率4 ...
- python打印输出世界你好!_Python语句 print(\\\世界,你好”)的输出是?
参考答案如下 中国大学MOOC: 带切口的几何体,语句不应在交线上标注尺寸.( ) 客户模式是价值变现系统,语句解决的是为谁服务的问题 [判断题]客户模式是价值变现系统,语句解决的是为谁服务的问题. ...
- python 阴阳师 识别图像_Python采集阴阳师式神全图鉴图片
https://yys.res.netease.com/pc/zt/20161108171335/data/shishen_big_beforeAwake/201.png https://yys.re ...
- python注册登录系统_Python实现简单用户注册信息管理系统
1 #coding:utf-8 2 ''' 3 用户注册信息管理系统4 功能包括:5 1.查看全部已注册用户信息6 2.查找用户信息7 3.修改用户信息8 4.删除用户信息9 5.添加新用户10 6. ...
- python学生管理系统教学_Python项目:学生信息管理系统(完整版)
本文是基于上一篇(python项目:学生信息管理系统(初版))进行了完善,并添加了新的功能. 主要包括有: 学生信息管理系统(完整版) 学生信息管理项目,要求带操作界面,并完成每项操作: +----- ...
- 用python设计学生管理系统_Python实现GUI学生信息管理系统
本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下 项目环境: 软件环境: OS:RedHat6.3 Lib:Pygtk Language:Python S ...
最新文章
- 开源、免费、提升办公效率,Win10官方出品
- 链表list(链式存储结构实现)_数据结构知否知否系列之 — 线性表的顺序与链式存储篇(8000 多字长文)...
- 逆向工程核心原理读书笔记-API钩取之计算器显示中文数字
- SystemCenter2012SP1实践(23)私有云的权限设计
- 深入浅出MongoDB(二)概述
- mysql字符串和数字的互相转换
- Mybatis foreach遍历
- 与孩子一起学编程python_与孩子一起学编程(Python读书笔记3)
- UVa-679 Dropping Balls(二叉树的编号)
- cf1042d 树状数组逆序对+离散化
- LeetCode:208. 实现 Trie (前缀树)
- 常用邮箱哪家好用?TOM邮箱口碑评价
- STM32 芯片锁死无法烧录问题解决
- 阿里巴巴国际站全屏代码装修贸店铺装修平台国际站平台全屏代码装修方法教程视频教程
- 企业邮箱哪个好用,公司如何选择企业邮箱
- 前端面试题总结(包含答案解析)
- 苹果LIVE PHOTOS实况照片转普通静态照片jpg
- 卸载ubuntu系统,恢复win10单系统【win10+Ubuntu20.04双系统】
- 2021安徽高考体考成绩查询,2021年安徽体育专业考试成绩查询网址:https://www.ahzsks.cn/...
- 如何回答三次握手问题
热门文章
- 如何让爆满的C盘腾出 10G空间
- 不当程序员,你会干什么
- ERROR: Failed to open zip file. Gradle‘s dependency cache may be corrupt (this sometimes occurs afte
- 黄铭钧:院长创业与酒
- 什么是思维导图?有哪些好用的思维导图工具
- UEFI Console Splitter
- python怎么编辑excel_python 修改excel表格数据-关于如何用python 编辑 excel表格
- 《30天自制操作系统》---第一天
- [附源码]计算机毕业设计JAVA校园超市进销存管理系统
- 顶流AI大赛背后:OPPO小布助手的技术势能和促成的想象力