目录
摘 要 1
一、 设计目的 2
二、 设计任务内容 3
三、 常用爬虫框架比较 3
四、网络爬虫程序总体设计 3
四、 网络爬虫程序详细设计 4
4.1设计环境和目标分析 4
4.2爬虫运行流程分析 5
爬虫基本流程 5
发起请求 5
获取响应内容 5
解析数据 5
保存数据 5
Request和Response 5
Request 5
Response 5
请求方式 5
GET 5
POST 5
URL 6
请求体 6
4.3控制模块详细设计 6
v = [] 8
v = [] 9
六、调试与测试 11
七、心得体会 12
参考文献 13
在本爬虫程序中共有三个模块:
1.爬虫调度端:启动爬虫,停止爬虫,监视爬虫的运行情况
2.爬虫模块:包含三个小模块,URL管理器,网页下载器,网页解析器。
(1)URL管理器:对需要爬取的URL和已经爬取过的URL进行管理,可以从URL管理器中取出一个带爬取的URL,传递给网页下载器。
(2)网页下载器:网页下载器将URL指定的网页下载下来,存储成一个字符串,传递给网页解析器。
(3)网页解析器:网页解析器解析传递的字符串,解析器不仅可以解析出需要爬取的数据,而且还可以解析出每一个网页只想其他网页的URL,这些URL被解析出来会补充进URL管理器
3、数据输出模块:存储爬取的数据
四、网络爬虫程序详细设计
4.1设计环境和目标分析
设计环境
IDE:pycharm
Python版本:python3
目标分析
1、初始URL:www.tianqihoubao.com/aqi 先通过url获取到网页。
2、数据格式

3、页面编码:UTF—8
4.2爬虫运行流程分析
爬虫基本流程
发起请求
通过HTTP库向目标服务器发送Request,Request内可以包含额外的headers信息。
获取响应内容
如果服务器正常响应,会返回Response, 里面包含的就是该页面的内容。
解析数据
内容或许是HTML,可以用正则表达式、网页解析库进行解析。
或许是Json,可以直接转换为Json对象解析。
保存数据
可以存储为文本,也可以保存至数据库,或其他特定类型文件。
Request和Response
Request
主机向服务器发送数据请求时的过程叫做HTTP Request
Response
服务器向主机返回数据的过程叫做HTTP Response
Request中包含的内容
请求方式
常用的有GET,POST两种类型。
GET
这种请求方式的参数都包含在网址里面。
POST
这种请求方式的参数包含在请求体中的form data中。相对安全。
URL
请求的网络链接。
请求头
包含请求时的头部信息。如:User-Agent、Host、Cookies等。
User-Agent
指定浏览器。
请求体
GET请求下一般情况请求体中不会包含重要信息。
POST请求中包含重要信息。
Response中包含的内容
响应状态
Status Code:200
即状态码,一般200表示响应成功。
响应头
Response Headers
内容类型,内容长度,服务器信息,设置Cookie等。
响应体
请求资源的内容,如网页源代码,二进制数据等。
4.3控制模块详细设计

爬取代码

import time
import requests
from bs4 import BeautifulSoupheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']for i in range(len(citys)):time.sleep(5)for j in range(1, 13):time.sleep(5)# 请求2018年各月份的数据页面url = 'http://www.tianqihoubao.com/aqi/' + citys[i] + '-2018' + str("%02d" % j) + '.html'# 有请求头(键值对形式表示请求头)response = requests.get(url=url, headers=headers)# html字符串创建BeautifulSoup对象soup = BeautifulSoup(response.text, 'html.parser')tr = soup.find_all('tr')for k in tr[1:]:td = k.find_all('td')# 日期Date = td[0].get_text().strip()# 质量等级Quality_grade = td[1].get_text().strip()# AQI指数AQI = td[2].get_text().strip()# 当天AQI排名AQI_rank = td[3].get_text().strip()# PM2.5PM = td[4].get_text()# 数据存储filename = 'air_' + citys[i] + '_2018.csv'with open(filename, 'a+', encoding='utf-8-sig') as f:f.write(Date + ',' + Quality_grade + ',' + AQI + ',' + AQI_rank + ',' + PM + '\n')
分析代码
import numpy as np
import pandas as pd
from pyecharts import Linecitys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
v = []
for i in range(4):filename = 'air_' + citys[i] + '_2018.csv'df = pd.read_csv(filename, header=None, names=["Date", "Quality_grade", "AQI", "AQI_rank", "PM"])dom = df[['Date', 'AQI']]list1 = []for j in dom['Date']:time = j.split('-')[1]list1.append(time)df['month'] = list1month_message = df.groupby(['month'])month_com = month_message['AQI'].agg(['mean'])month_com.reset_index(inplace=True)month_com_last = month_com.sort_index()v1 = np.array(month_com_last['mean'])v1 = ["{}".format(int(i)) for i in v1]v.append(v1)attr = ["{}".format(str(i) + '月') for i in range(1, 12)]line = Line("2018年北上广深AQI全年走势图", title_pos='center', title_top='0', width=800, height=400)
line.add("北京", attr, v[0], line_color='red', legend_top='8%')
line.add("上海", attr, v[1], line_color='purple', legend_top='8%')
line.add("广州", attr, v[2], line_color='blue', legend_top='8%')
line.add("深圳", attr, v[3], line_color='orange', legend_top='8%')
line.render("2018年北上广深AQI全年走势图.html")import numpy as np
import pandas as pd
from pyecharts import Pie, Gridcitys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
v = []
attrs = []
for i in range(4):filename = 'air_' + citys[i] + '_2018.csv'df = pd.read_csv(filename, header=None, names=["Date", "Quality_grade", "AQI", "AQI_rank", "PM"])rank_message = df.groupby(['Quality_grade'])rank_com = rank_message['Quality_grade'].agg(['count'])rank_com.reset_index(inplace=True)rank_com_last = rank_com.sort_values('count', ascending=False)attr = rank_com_last['Quality_grade']attr = np.array(rank_com_last['Quality_grade'])attrs.append(attr)v1 = rank_com_last['count']v1 = np.array(rank_com_last['count'])v.append(v1)pie1 = Pie("北京", title_pos="28%", title_top="24%")
pie1.add("", attrs[0], v[0], radius=[25, 40], center=[30, 27], legend_pos="27%", legend_top="51%", legend_orient="horizontal",)pie2 = Pie("上海", title_pos="58%", title_top="24%")
pie2.add("", attrs[1], v[1], radius=[25, 40], center=[60, 27], is_label_show=False, is_legend_show=False)pie3 = Pie("广州", title_pos='28%', title_top='77%')
pie3.add("", attrs[2], v[2], radius=[25, 40], center=[30, 80], is_label_show=False, is_legend_show=False)pie4 = Pie("深圳", title_pos='58%', title_top='77%')
pie4.add("", attrs[3], v[3], radius=[25, 40], center=[60, 80], is_label_show=False, is_legend_show=False)grid = Grid("2018年北上广深全年空气质量情况", width=1200)
grid.add(pie1)
grid.add(pie2)
grid.add(pie3)
grid.add(pie4)
grid.render('2018年北上广深全年空气质量情况.html')








基于Python的网络爬虫爬取天气数据可视化分析相关推荐

  1. python爬虫爬取天气数据并图形化显示

    前言 使用python进行网页数据的爬取现在已经很常见了,而对天气数据的爬取更是入门级的新手操作,很多人学习爬虫都从天气开始,本文便是介绍了从中国天气网爬取天气数据,能够实现输入想要查询的城市,返回该 ...

  2. python微博评论爬虫_详解用python写网络爬虫-爬取新浪微博评论 基于Python的新浪微博爬虫研究...

    怎样爬取新浪微博的评论信息 针对八爪鱼在微博的应用上,除了用户信息之外还包括话题内容方面的采集,目前绝大多数企业均在微博设有官方微博,八爪鱼可以协助企业快速及时的抓取与企业产品相关联的话题信息,规则市 ...

  3. python爬取微博恶评_详解用python写网络爬虫-爬取新浪微博评论

    新浪微博需要登录才能爬取,这里使用m.weibo.cn这个移动端网站即可实现简化操作,用这个访问可以直接得到的微博id. 分析新浪微博的评论获取方式得知,其采用动态加载.所以使用json模块解析jso ...

  4. Python网络爬虫爬取招聘数据(利用python简单零基础)可做可视化

    爬取Boss直聘相关的招聘数据 一.相关需求分析 1.目的 二.直聘网页结构分析 1.网页相关值的查找 2.网页的下一页规律查找 三.Python相关的第三库介绍 1.Urllib的介绍 (1)url ...

  5. 用python写网络爬虫-爬取新浪微博评论

    新浪微博需要登录才能爬取,这里使用m.weibo.cn这个移动端网站即可实现简化操作,用这个访问可以直接得到的微博id. 分析新浪微博的评论获取方式得知,其采用动态加载.所以使用json模块解析jso ...

  6. 网络爬虫——爬取京东数据

    下面是我的代码框架(请先看代码需要改进的地方) 需要改进的是 1.采用双缓冲队列,即两个队列,可以理解为一个队列用于生产者的数据写入,一个用于消费者的数据读取,当消费者队列没有数据从生产者队列获取,减 ...

  7. python爬虫爬取房源_手把手教你用Python网络爬虫爬取新房数据

    项目背景 大家好,我是J哥. 新房数据,对于房地产置业者来说是买房的重要参考依据,对于房地产开发商来说,也是分析竞争对手项目的绝佳途径,对于房地产代理来说,是踩盘前的重要准备. 今天J哥以「惠民之家」 ...

  8. python爬虫和数据可视化论文_Python爬虫之小说信息爬取与数据可视化分析

    一.小说数据的获取 获取的数据为起点中文网的小说推荐周榜的所有小说信息. 源代码对所有想要获取的数据都有注释. http://dxb.myzx.cn/grandmal/ # -*- coding: u ...

  9. python数据可视化字段_python数据爬取及数据可视化分析

    电影网站数据分析及可视化研究 本博客是一篇集数据爬取,存储为excel表格,将数据可视化为一体的博文,数据爬取采用request等方法,数据可视化会使用图表进行展示,有改进的地方还请大家多多指教. 数 ...

最新文章

  1. C#帮助类:MD5加密
  2. win7下简单FTP服务器搭建
  3. mybatis入门(六)之SQL语句构建器类
  4. 牛客 牛牛的独特子序列(双指针/二分查找)
  5. Java学习4大阶段完成入门,小白必读!
  6. Delphi窗口属性
  7. java 字体有哪些_java字体有哪些
  8. mysql 事务处理null_如何使用Mysql正确的处理财务数据
  9. Atitit 数据库视图与表的wrap与层级查询规范
  10. 量子计算机是一种采用基于原理,量子计算的发展
  11. 树莓派系统安装 3.5寸LCD驱动安装 ssh远程链接
  12. 微信小程序怎么添加底部菜单按钮
  13. 我们都是被宫崎骏爱过的孩子
  14. 数据结构与算法之美(二)
  15. iBatis延迟加载
  16. 正交变换不改变矩阵F-范数、2-范数的证明
  17. xlwings 单元格复制/列复制/sheet复制
  18. Git Cheat Sheet——Git的常用命令和最佳做法
  19. 三菱PLC远程监控与数据采集方案
  20. lr增强细节_LR和PS如何进行风光后期细节增强

热门文章

  1. 广西农业技术职业学院计算机,广西农业职业技术学院宿舍怎么样
  2. STP BPDU报文
  3. 那一份无怨亦无悔的真情实意
  4. 手写jQuery源码
  5. 这27个电源符号,还傻傻分不清楚?
  6. 创建微信订阅号全攻略
  7. 洛谷P1941 飞扬的小鸟
  8. Android调用系统输入法
  9. 阿里天池心跳信号分类预测baseline
  10. C语言 实现99乘法口诀表