python爬虫课设-爬取3000条数据并做数据可视化

很久以前接的单子,分享一下(挺水的,将就着看吧)

作业要求

《Python与数据分析》期末大作业要求(2020-2021学年第2学期)
一、期末作业要求:
1、在前期作业爬取的数据基础上,用Python编写代码对爬取的数据进行全面数据分析并可视化,鼓励建立计量模型进行分析;
2、写作期末大作业文档:整体思路,对爬取网站的分析,对数据进行哪些方面的数据分析及数据的可视化,结论。
3、必须自己编写爬虫程序,不允许使用爬虫框架(如scrapy) 爬取数据,严禁抄袭。
二、提交:
1、爬虫程序代码(前期作业)文件
(.ipynb),加, 上必要的注释或笔记说明;
2、数据分析、可视化代码文件(.ipynb) ,加上必要的注释或笔记说明;
3、抓取的数据文件及数据分析和可视化产生的中间文件;
4、期末作业文档。

数据爬取

# 用于爬取信息
import requests
# 用于解析网页
from bs4 import BeautifulSoup
# 用于正则匹配找到目标项目
import re
# 对csv文件的操作
import csv

# 打开文件
# a+权限追加写入
# newline=""用于取消自动换行
fp = open("data.csv", "a+", newline="")
# 修饰,处理成支持scv读取的文件
csv_fp = csv.writer(fp)
# 设置csv文件内标题头
head = ['日期', '最高气温', '最低气温']
# 写入标题
csv_fp.writerow(head)

# UA伪装
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0"
}

# 存放全部数据
data = []

# 进行url拼接,主要拼接的是年份和月份
# 从2011年到2020年
for i in range(2011, 2021):
    # 从1月到12月
    for j in range(1, 13):
        # 字符串化
        i = str(i)
        # 小于10则补0
        if j < 10:
            j = "0" + str(j)
        else:
            # 字符串化
            j = str(j)
        # 完成拼接
        url = "http://www.tianqihoubao.com/lishi/beijing/month/" + i + j + ".html"

        # 获取响应
        response = requests.get(url=url, headers=headers)
        # 设置编码为gbk
        response.encoding = 'gbk'
        # 获取响应文本数据
        page = response.text
        # 用BeautifulSoup解析网页
        soup = BeautifulSoup(page, 'lxml')
        # 获取所有tr标签
        tr_list = soup.find_all('tr')

        # 解析每一个tr标签
        for tr in tr_list:
            # 用于存放一天的数据
            one_day = []
            # 字符串化便于正则匹配
            tr = str(tr)
            # 去除所有空格
            tr = tr.replace(" ", "")
            # 取出日期
            date = re.findall(r'title="(.*?)北京天气预报">', tr)
            # 如果取到则放入one——day存放
            if date:
                one_day.append(date[0])
            # 取出最高温和最低温
            tem = re.findall(r'(.*?)℃', tr)
            # 如果取到则放入one——day存放
            if tem:
                one_day.append(tem[0])
                one_day.append(tem[1])
            # 如果完整的取到一天的数据则放入data存放
            if len(one_day) == 3:
                data.append(one_day)
                print(one_day)
                # 写入csv文件
                csv_fp.writerow(one_day)

# 关闭文件指针
fp.close()

爬取结果

在这里插入图片描述

数据处理

# 读取csv文件
import csv
# 作图工具
from matplotlib import pyplot as plt

# 存放日期
x = []
# 存放最高气温
h = []
# 存放最低气温
l = []
# 读取之前爬取的数据
with open("data.csv") as f:
    reader = csv.reader(f)
    j = 1
    for i, rows in enumerate(reader):
        # 不要标题那一行
        if i:
            row = rows
            print(row)
            x.append(rows[0])
            h.append(int(rows[1]))
            l.append(int(rows[2]))
# 设置画板大小
fig = plt.figure(dpi=128, figsize=(20, 6))
# 显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 画最高气温
plt.plot(x, h, c="red", alpha=0.5)
# 画最低气温
plt.plot(x, l, c="blue", alpha=0.5)
# 区间渲染
plt.fill_between(x, h, l, facecolor="blue", alpha=0.2)
# 标题
plt.title("北京市过去3658天的气温变化")
# y轴名称
plt.ylabel("气温")
# x轴名称
plt.xlabel("日期")
plt.xticks(x[::300])
plt.show()

数据可视化

请添加图片描述

大作业文档

整体思路
爬取天气后保网站北京市过去9年(3658天)的最高温度和最低温度,并运用matplotlib绘制折线图进而分析天气变化趋势
网站分析
1.该网站单次只能查询一个月的天气情况,所以通过拼接url的方式依次查询
2.查询数据位于table表单中,tr标签没有属性,所有用正则匹配处理每个tr时需要判断有没有取到数据,日期,最高气温,最低气温都查询到时视为成功并存入总数据的列表
数据分析
1.通过过去3658天的气温变化,可以看出北京市每年的寒暑气温温差基本稳定在50度左右,而2015年寒暑温差超过60度
结论
1.北京市温度变化基本符合规律

  • 35
    点赞
  • 264
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 10
    评论
【资源说明】 基于Flask+Pyecharts实现的实习僧网站数据可视化源码+项目说明.zip IDE: Pycharm Professional、VScode、 Python version :3.9.13 Database:Mysql version-5.8 其它工具:phpmyadmin ``` 食用方法: csdn下载该项目并解压 本项目所需依赖环境已在requirements.txt文件中。 **使用前请先创建虚拟环境!** (具体创建方法自行百度,建议创建在项目根目录下) 然后在虚拟环境内安装requirements.txt的依赖,运行命令: ```shell pip install -r requirements.txt ``` 建议使用pycharm专业版运行项目 如若使用vscode等其它编辑器请先激活虚拟环境,然后再在虚拟环境下执行主程序文件 ```shell (venv)powershell:python ./app.py ``` 执行之后打开本地环回地址127.0.0.1:5000即可访问页面,如果需要进行公网访问请将host设置为0.0.0.0,端口随意但切勿与其它服务撞车。 ## 可视化流程大致如下: 1.寻找数据,收集数据并处理好数据。 2.对数据进行分析,以出合理的图表。 3.先对数据生成图表页面,存放在**templates**文件夹 4.在app.py文件中对设定文件进行文件路由调用以及负载均衡(**如果需要**) # 所需技术栈 __HTML、Python、JavaScript、Mysql、flask__ **本项目为河池学院大数据20班可视化课程项目设计,分为几大模块:** ## 1.数据爬取 数据爬取文件夹位于项目根目录下的.\pa_chong\ 主程序文件为spider-demo.py,在运行前需要对所爬取的网页进行网页结构分析,对所需数据进行xpath定位或者re正则定位,提取我们所需要的数据。 然后,分析服务器是否存在反爬虫,比如字体反爬、ip封锁、验证码等,定制化相应的措施 对于实习僧这个网站来说,反爬措施为字体反爬与IP封锁,我们仅需对其get(access)、token(parmas)、等处理即可,然后进行字体重编码,因为其网页前端的字体为自定义字体。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
感谢您的提问。我理解您想了解如何用 Python 爬虫爬取雪球网的金融数据。下面是一个简单的爬虫项目,可以帮助您实现这个目标: 1. 确定爬取的目标网页 我们需要确定要爬取的目标网页。在本例中,我们将使用雪球网的金融数据页面:https://xueqiu.com/hq。 2. 使用 requests 库发送 HTTP 请求 我们可以使用 Python 的 requests 库来发送 HTTP 请求并从目标网页获取数据。以下是如何发送 GET 请求的示例代码: ```python import requests url = 'https://xueqiu.com/hq' response = requests.get(url) print(response.text) ``` 3. 解析 HTML 页面 我们可以使用 Python 的 Beautiful Soup 库来解析 HTML 页面。以下是如何使用 Beautiful Soup 库解析响应的 HTML 页面的示例代码: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') # 打印解析后的 HTML 页面 print(soup.prettify()) ``` 4. 提取数据 一旦我们成功解析了 HTML 页面,就可以使用 Beautiful Soup 库中的一些方法来提取我们需要的数据。以下是如何从 HTML 页面中提取股票代码和股票名称的示例代码: ```python # 找到包含股票代码和名称的表格 table = soup.find('table', {'class': 'table'}) # 找到所有的行 rows = table.find_all('tr') # 遍历每一行,并提取股票代码和名称 for row in rows: cols = row.find_all('td') if len(cols) > 0: code = cols[0].text.strip() name = cols[1].text.strip() print(code, name) ``` 5. 存储数据 最后,我们可以将提取的数据存储到文件中。以下是如何将股票代码和名称存储到 CSV 文件中的示例代码: ```python import csv with open('stocks.csv', 'w', newline='') as csvfile: writer = csv.writer(csvfile) writer.writerow(['Code', 'Name']) for row in rows: cols = row.find_all('td') if len(cols) > 0: code = cols[0].text.strip() name = cols[1].text.strip() writer.writerow([code, name]) ``` 希望这个爬虫项目可以帮助您了解如何用 Python 爬虫爬取雪球网的金融数据。如果您还有其他问题,请随时问我。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Henrik-Yao

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值