Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

人工智能40

爬取最新疫情信息

目录

爬取最新疫情信息

一、选题的背景

二、主题式网络爬虫设计方案

三、主题页面的结构特征分析

四、网络爬虫程序设计

五、数据分析

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

一、选题的背景

为什么要选择此选题?

由于疫情的影响,世界各地因新型冠状病毒(简称新冠肺炎)而陷入各种危机。因此,我对国内现有的疫情数据进行了爬取和一些数据分析,更直观地看待国外现有的疫情情况。

[En]

Due to the influence of the epidemic, all parts of the world are caught in various crises because of novel coronavirus (COVID-19 for short). Therefore, for the existing domestic epidemic data I carried out a crawl and some data analysis, a more intuitive view of the existing epidemic situation abroad.

让现在社会上流动频繁的人们加强预防意识,知道哪些地区是高危地区,哪些是出行保护。出差、出差的群众也更多地了解各地疫情,尽量避免到高危地区出行。

[En]

Let people who are now in frequent circulation in society strengthen their awareness of prevention and know which areas are at high risk and travel for protection. People who go out on business and go out on business also know more about the epidemic situation in various places and try their best to avoid traveling in high-risk areas.

数据来源:一点资讯。

网址:24小时滚动播报全国最新疫情 (yidianzixun.com)

二、主题式网络爬虫设计方案

1.主题式网络爬虫名称

Python网络爬虫———现存疫情数据爬取及分析

2.主题式网络爬虫爬取的内容与数据特征分析

爬取现存疫情数据并进行处理

3.主题式网络爬虫设计方案概述

先确定主题,爬取现存疫情数据,设计爬取程序进行爬取,并以excel形式储存,然后利用pandas库进行数据分析和清洗,再利用Matplotlib等库进行图形图像绘制。最后保存数据。 使用到的模块:

requests:模拟网络连接,发送请求,获取网页内容

json:第三方库,对爬取的数据编解码

xlrd:第三方库,读取excel文件

xlwt:第三方库,写入excel文件

我们把代码分为几个个模块爬取模块(),存储模块(),分析模块()

三、主题页面的结构特征分析

1.主题页面的结构与特征分析

首页与信息集

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

2.开发者工具进行抓包Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

3.获取url

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

4.获取请求头headers

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

5.拿到response数据

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

6.在线解析拿到的response数据

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

7.找到要获取的信息

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

四、网络爬虫程序设计

1.数据爬取与采集

用到的库

import json#转换成字符串
import pandas as pd
import requests#对爬取的网站发出请求
import sys#系统库
import xlrd#对爬取的excel进行查取与搜索
import xlwt#进行excel操作
import matplotlib.pyplot as plt#数据处理绘图工具

开发者工具进行抓包,分析url和发送的请求(上面的图可以看出是get请求),再拿到user-agent

信息,装成字典,模拟成浏览器,最后将服务器响应的数据转为文档(pa_text = resp.text)

这时拿到的是字符串,利用json库里的json.loads()用法将字符串转化为python里的字典(下面图2)可以发现页面中只有省的信息,而在服务器返回给我们的数据中还有每个市级的信息

import json#转换成字符串
import pandas as pd#数据分析
import requests#对爬取的网站发出请求

import DataStorage

def main():
    #爬取的网页链接
    url = 'https://m.yidianzixun.com/hybrid/req?url=https%3A%2F%2Fa1.go2yd.''com%2FWebsite%2Fproxy%2Fget-epidemic-data%3Ffrom%3Dtools%26province_name%3D%25E5%2585%25A8%25E5%259B%25BD'
    #模拟浏览器头部信息,向服务器发送消息
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)''AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36'}
    resp = requests.get(url, headers=headers)
    resp.encoding = "utf-8"
    #1.爬取网页
    pa_text = resp.text
    all_data = json.loads(pa_text)
    #2.提取数据
    list_data = all_data["data"]['domestic_data']["data"]
    list1_data = all_data['data']["foreign_data"]['data']
    country_data = getdataf(list1_data)
    xing_data = getdatax(list_data)
    shi_data = getdatas(list_data)
    #3.保存数据
    savepath = "疫情.xls"
    DataStorage.savedata(country_data,xing_data, shi_data, savepath)
#提取国家疫情数据
def getdataf(list1_data):
    foreign_data = []
    for i in list1_data:
        j = 1
        for value in i.values():
            foreign_data.append(value)
            j +=1
            if j>6:
                break
    #删除无用数据
    foreign_data.pop(0)
    for i in range(1, 67):
        i *= 5
        foreign_data.pop(i)
    return foreign_data
#提取省疫情数据
def getdatax(list_data):
    xing_data = []
    for i in list_data:
        j = 1
        for value in i.values():
            xing_data.append(value)
            j += 1
            if j>6:
                break
    #消除无用数据
    xing_data.pop(0)
    for i in range(1, 34):
        i *= 5
        xing_data.pop(i)
    return xing_data
#提取市疫情数据
def getdatas(list_data):
    shi_data = []
    for i in range(33):
        s = list_data[i]['cities_data']
        for j in s:
            for k in j.values():
                shi_data.append(k)
    #消除无用数据
    for j in range(4000):
        for i in shi_data:
            if i == '城市全称'or i == '' or i == '待明确地区':
                del shi_data[shi_data.index(i):shi_data.index(i) + 8]
    return shi_data

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

我们要的数据在这本词典里。大词典中有小词典,小词典中有列表,列表中有词典。目标数据在内部。下一步是获取词典的值并对列表进行切片。逐步获取目标值(第二张图片显示三个数据之一)

[En]

The data we want is in this dictionary. There are small dictionaries in the big dictionary, lists in the small dictionaries, and dictionaries in the list. The target data is on the inside. The next step is to take the value of the dictionary and slice the list. Get the target value step by step (the second picture value shows one of the three data)

2.数据的存储用python里的第三方库xlwt,把数据存储到excel中

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

import xlwt
def savedata(country_data,xing_data,shi_data,savepath):
    print("save.......")
    #创建workbook对象
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)
    #创建疫情(全球)工作表
    country = book.add_sheet('疫情(全球)', cell_overwrite_ok=True)
    colc = ("国家", "确诊", "疑似", "死亡", "治愈")#设置列名
    for i in range(5):
        country.write(0, i, colc[i])#写入列名
    for i in range(67):
        C = country_data[i * 5:]
        for j in range(5):
            country.write(i + 1, j, C[j])#写入数据
    #创建疫情(省)工作表
    xing = book.add_sheet('疫情(省)', cell_overwrite_ok=True)
    colx = ("省", "确诊", "疑似", "死亡", "治愈")
    for i in range(5):
        xing.write(0, i, colx[i])
    for i in range(34):
        X = xing_data[i * 5:]
        for j in range(5):
            xing.write(i + 1, j, X[j])
    #创建疫情(市)工作表
    shi = book.add_sheet('疫情(市)', cell_overwrite_ok=True)
    cols = ("市", "市区", "确诊", "疑似", "死亡", "治愈", "现有确诊", "新增")
    for i in range(8):
        shi.write(0, i, cols[i])
    for i in range(420):
        S = shi_data[i * 8:]
        for j in range(8):
            shi.write(i + 1, j, S[j])
    book.save(savepath)#保存

五、数据分析

在爬取完数据存到excel表中会做一些数据处理:绘制数据图(饼状图、折线图、直方图)、以某一列对整表进行排序、只取数据的某列某行,输出指定目标的一行数据。

是否想用python实现处理excel数据?听我一一为你道来

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

所用到的模块有:

import pandas as pd#数据分析
import xlrd#对爬取的excel进行查取与搜索
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']#绘制的图正常显示中文字体
mpl.rcParams['axes.unicode_minus'] = False#绘制的图正常显示负号
import random#随机

import random
#随机色
def rndcolor():
    return '#'+hex(random.randint(66,255))[-2:]+hex(random.randint(82,255))[-2:]+hex(random.randint(99,255))[-2:]

1.创建数据图(以"国家"工作表,"疫情"为例):
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

饼状图

cb=pd.read_excel('疫情.xls', sheet_name='疫情(全球)',index_col='from')index_col表示以那一列为x轴
cb['列名'].plot.pie(autopct='%1.2f%%',pctdistance=1.1,labeldistance=1.2)
explode设置分离度 counterclock顺(逆)时针 radius:饼图半径 startangle:开始角度
pctdistance:数据离中心点距离(默认为0.6,超过1为圆外)
labeldistance:对应标签距离圆的距离(默认1.1)

import pandas as pd#数据分析
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']#绘制的图正常显示中文字体
mpl.rcParams['axes.unicode_minus'] = False#绘制的图正常显示负号

cb=pd.read_excel('疫情.xls', sheet_name='疫情(全球)',index_col='国家')#调用工作表
cb['确诊'].plot.pie(autopct='%1.2f%%',pctdistance=1.1,labeldistance=1.2)
plt.title('关于各国家疫情确诊人数饼状图',fontsize=16,fontweight='bold',color=rndcolor())#设置图标题
plt.ylabel('确诊',fontsize=12,fontweight='bold',color=rndcolor())#设置列标签
plt.legend()#显示图例
plt.axis('equal')#显示为圆,不标记可能因为数据过多而变成椭圆
plt.show()

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

直方图

plt.bar(xc['列名'],xc['值的列名'],color=rndcolor())#绘制直方图

import pandas as pd#数据分析
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']#绘制的图正常显示中文字体
mpl.rcParams['axes.unicode_minus'] = False#绘制的图正常显示负号

xc = pd.read_excel('疫情.xls', sheet_name='疫情(全球)')
plt.bar(xc['国家'],xc['确诊'],color=rndcolor())
plt.xlabel('国家',fontsize=12,fontweight='bold',color=rndcolor())
plt.ylabel('人数',fontsize=12,fontweight='bold',color=rndcolor())
plt.grid()#显示网格线默认True显示
plt.show()

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

折线图

图形标记:o:圆 v,^:三角 s:正方形 p:五边形 *:星形 h:六边形 x:x标记 d:菱形
plt.plot(xc['列名'],xc['值的列名'],label='值的列名',linewidth=3,color=rndcolor(),marker='o',markerfacecolor=rndcolor(),markersize=12)#绘制折线图

import pandas as pd#数据分析
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']#绘制的图正常显示中文字体
mpl.rcParams['axes.unicode_minus'] = False#绘制的图正常显示负号

xc = pd.read_excel('疫情.xls', sheet_name='疫情(全球)')
l=['确诊','疑似','死亡','治愈','现有确诊','新增']
for i in l[0:4]:#只取前4列
    plt.plot(xc['国家'],xc[i],label=i,linewidth=3,color=rndcolor(),marker='o',markerfacecolor=rndcolor(),markersize=12)
plt.title("关于各国家疫情情况折线图",fontsize=16,fontweight='bold',color=rndcolor())
plt.xlabel('国家',fontsize=12,fontweight='bold',color=rndcolor())
plt.ylabel('人数',fontsize=12,fontweight='bold',color=rndcolor())
plt.legend()#显示图例
plt.grid()#显示网格线
plt.show()

2.以某列进行排序:

xc = pd.read_excel('疫情.xls', sheet_name='疫情(全球)')
xc.sort_values(by='列名', inplace=True, ascending=False)

ascending:False为降序,inplace:True表示不创建新的对象,直接对原始对象进行修改

print(xc)表示输出整张表数据
print(xc.iloc[:n,:])表示取前n行全部列
print(xc.iloc[:n,:m])表示取前n行前m列
print(xc.iloc[:n,[a,b])表示取前n行第a列和第b列

import pandas as pd

xc = pd.read_excel('疫情.xls', sheet_name='疫情(全球)')
xc.sort_values(by='确诊', inplace=True, ascending=False)
print(xc.iloc[:5,:])

排序前:

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

排序后:

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

3.只取某行数据

import xlrd

#打开工作簿
xl = xlrd.open_workbook(r"疫情.xls")
#取表
table = xl.sheets()[0]#取第一个工作表
country = table.col_values(0)#国家列
sure = table.col_values(1)#确诊列
suspect = table.col_values(2)#疑似列
death = table.col_values(3)#死亡列
cure = table.col_values(4)#治愈列
aim='美国'
if(aim in country):
    print("国家\t\t确诊\t\t疑似\t\t死亡\t\t治愈")
    l = country.index(aim)
    print(f"{aim}\t\t{sure[l]}\t\t{suspect[l]}\t\t{death[l]}\t\t{cure[l]}")

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

Original: https://blog.csdn.net/qq_3148675740/article/details/121731813
Author: qq_3148675740
Title: Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)



相关阅读

Title: 用Anaconda安装TensorFlow(Windows10)

用Anaconda安装TensorFlow

本部分分为方法一和方法二,方法一是从清华镜像官网下载速度较快,
方法二是从GitHub下载,速度较慢(有梯子的建议使用)

1.打开Anaconda Prompt
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
2.输入下面两行命令,打开清华镜像官网

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --set show_channel_urls yes

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

3.输入下面命令,利用Anaconda创建一个python3.9的环境,环境名称为tensorflow(这里python版本根据自己的情况如下图)

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

conda create -n tensorflow python=3.9

如图所示:
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
4.输入y
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
5.打开Anaconda Navigator,点击Environments,可以看到名称为tensorflow的环境已经创建好
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
6.上一步最后我们可以看到,启动Tensorflow,使用下面的命令行:

conda activate tensorflow

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)

关闭tensorflow环境,使用下面的命令行:
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
7.我们在这里输入下面的命令,进入tensorflow环境

conda activate tensorflow

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
8.输入下面的命令行,安装cpu版本的tensorflow

conda install tensorflow

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
此时我们再次查看Anaconda Navigator中的Environments,可以发现tensorflow已经安装好了

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
第8步注意!!!
如果出现下图情况或者是从GitHub上下载速度极慢,说明清华镜像网址没有切换成功

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
重新执行步骤二即可

TensorFlow安装方法方法二

方法二速度特别特别慢 (如果有梯子的话建议使用)
1.安装好Anaconda后,在系统栏双击打开Anaconda Navigator

Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
2.点击Environment,Create
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
3.创建一个tensorflow的新环境,python在这里可以自行选择(根据Anaconda中安装的python版本,我这里是python3.8),然后点击Create
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
4.右边搜索栏输入tensorflow,选择后点击Apply
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
5.点击Apply
Python简单爬虫+excel数据分析(绘制数据图、排序、查找指定数据)
等待安装完成即可

Original: https://blog.csdn.net/m0_46299185/article/details/124280787
Author: bEstow--
Title: 用Anaconda安装TensorFlow(Windows10)

相关文章