期末作业|Python爬虫数据采集可视化分析项目完整版

请添加图片描述

这是我本学期的数据可视化期末作业,如果对您有帮助,给个关注吧!!

作品效果展示:

柱状图:
在这里插入图片描述
柱状图:
在这里插入图片描述
折线图:
在这里插入图片描述
折线图:
在这里插入图片描述
折线图:
在这里插入图片描述
数据集:
在这里插入图片描述
总共三张表:进行数据分析
在这里插入图片描述

代码:

第一个数据集通过爬虫爬取:
获取数据代码:

import bs4
import pandas as pd
import requests

def head(url):
    header={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.51'
    }
    reqs = requests.get(url,headers=header)
    return reqs
def run():
    global ws
    bank = []  # 世界排名
    country = []  # 国家
    num = []  # 人口基数
    index = []  # 增长率
    p = []  # 密度

    for i in range(1,13):
        url = "https://web.phb123.com/city/renkou/rk_"+str(i)+".html"
        r = requests.get(url)
        html = bs4.BeautifulSoup(r.text.encode("utf-8"),"html.parser")
        # 获得排名
        ranklist = html.find_all(class_="xh")
        for rank in ranklist:
            bank.append(rank.get_text('td'))
        # 获得国家名
        namelist = html.find_all(class_="cty")
        for name in namelist:
            country.append(name.text.strip())
        # 获得人口基数
        for i in range(0,20):
            numlist = html.find_all('td')[2+5*i].text
            num.append(numlist)
        # 增长率
        for i in range(0, 20):
            indexlist = html.find_all('td')[3 + 5 * i].text
            index.append(indexlist)
#         人口密度
        for i in range(0, 20):
            plist = html.find_all('td')[4 + 5 * i].text
            p.append(plist)
    data = {
        "排行榜": bank,
        "国家": country,
        "人口": num,
        "增长率": index,
        "密度": p
    }
    df = pd.DataFrame(data)
    df.to_excel("世界人口数据1.xlsx",index=False)

if __name__ == '__main__':
    run()

处理数据:

import pandas as pd

# 加载原始的 Excel 文件数据
df = pd.read_excel('世界人口数据1.xlsx')

# 进行数据预处理
df = df.dropna(subset=['国家'])  # 去除国家为空的行
df = df[df['人口'] != 0]  # 去除人口为0的行
df = df[df['增长率'] != '0.00%']  # 去除增长率为0的行
df = df[df['密度'] != 0]  # 去除密度为0的行

# 存储处理后的数据到新的 Excel 文件
df.to_excel('处理后的世界人口数据.xlsx', index=False)

需要数据集的可以微信加我获取

在这里插入图片描述

完整数据爬取代码和数据可视化代码可加我文章下方微信获得,一小时内好友通过

程序设计报告:

程序结构说明文档:
对三个数据集进行分析,三个数据集来源:
通过爬虫爬取世界人口国家排名:世界国家人口数据数据集
剩余两个是网上下载的数据集,一个中国近几十年人口数量数据集,
另一个是医疗消费水平数据集。
第一个数据集:世界国家人口数据数据集文档说明:
程序详细设计
(1)程序编写思路流程图:
(2)设计代码实现:
爬虫技术:python
数据存储:xlsx文件
数据可视化处理:pyechatrs模块
1.通过python对所需要的数据进行爬取并进行存储
目标网页内容:
相关模块导入:
import bs4
import pandas as pd
import requests
数据爬取过程:伪装请求网址请求头
def head(url):
header={
‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54’
}
reqs = requests.get(url,headers=header)
return reqs
通过BeautifulSoup模块进行所求标签进行锁定和数据处理并存储
def run():
global ws
bank = [] # 世界排名
country = [] # 国家
num = [] # 人口基数
index = [] # 增长率
p = [] # 密度

for i in range(1,8):
    url = "https://web.phb123.com/city/renkou/rk_"+str(i)+".html"
    r = requests.get(url)
    html = bs4.BeautifulSoup(r.text.encode("utf-8"),"html.parser")
    # 获得排名
    ranklist = html.find_all(class_="xh")
    for rank in ranklist:
        bank.append(rank.get_text('td'))
    # 获得国家名
    namelist = html.find_all(class_="cty")
    for name in namelist:
        country.append(name.text.strip())
    # 获得人口基数
    for i in range(0,20):
        numlist = html.find_all('td')[2+5*i].text
        num.append(numlist)
    # 增长率
    for i in range(0, 20):
        indexlist = html.find_all('td')[3 + 5 * i].text
        index.append(indexlist)
	# 人口密度
    for i in range(0, 20):
        plist = html.find_all('td')[4 + 5 * i].text
        p.append(plist)
data = {
    "排行榜": bank,
    "国家": country,
    "人口": num,
    "增长率": index,
    "密度": p
}
df = pd.DataFrame(data)
df.to_json("世界人口数据.xls",encoding="utf-8")

2.通过pyecharts模块对采集的数据进行可视化处理 相关模块导入: import re import xlrd from pyecharts import options as opts from pyecharts.charts import Map,
Bar, Pie, Page, Line, Geo 首先处理保存在xls文件内容的数据并将其转化为字典格式
首先处理数据转化为字典格式
表格数据提取 data=xlrd.open_workbook(‘世界人口数据.xls’) table = data.sheet_by_name(‘Sheet1’) row_Num=table.nrows col_Num= table.ncols
s=[] key = table.row_values(0) j = 1 for i in range(row_Num-1):
d = {}
values = table.row_values(j)
for x in range(col_Num):
# 把key值对应的value赋值给key,每行循环
d[key[x]] = values[x]
j += 1
# 把字典加到列表中
s.append(d) 进行可视化数据分析:柱状图

折线图效果展示:

饼状图效果展示:

(3)疑难问题处理:
1.难点:多页爬取数据,页面翻页 通过观察网页的规律:

通过改变url的规律来完成翻页 for i in range(1,8):
url = “https://web.phb123.com/city/renkou/rk_”+str(i)+“.html”
r = requests.get(url)
html = bs4.BeautifulSoup(r.text.encode(“utf-8”),“html.parser”)
2.难点:对特定标签的数据进行采集和爬取 目标数据分析:

通过规律对所需内容进行筛选,并添加进入列表 # 获得排名
ranklist = html.find_all(class_=“xh”)
for rank in ranklist:
bank.append(rank.get_text(‘td’))
# 获得国家名
namelist = html.find_all(class_=“cty”)
for name in namelist:
country.append(name.text.strip())
# 获得人口基数
for i in range(0,20):
numlist = html.find_all(‘td’)[2+5*i].text
num.append(numlist)
# 增长率
for i in range(0, 20):
indexlist = html.find_all(‘td’)[3 + 5 * i].text
index.append(indexlist)
#人口密度
for i in range(0, 20):
plist = html.find_all(‘td’)[4 + 5 * i].text
p.append(plist)
3.难点:对列表数据写进xls文件 通过将列表数据转化成字典,写进存储文件中 data = {
“排行榜”: bank,
“国家”: country,
“人口”: num,
“增长率”: index,
“密度”: p } df = pd.DataFrame(data) df.to_json(“世界人口数据.xls”,encoding=“utf-8”)

第二个数据集:一个中国近几十年人口数量数据集

折线图效果展示:

第三个数据集:医疗消费水平数据集

柱状图效果展示:

  • 20
    点赞
  • 218
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物皆可der

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值