[python爬虫]爬取天气网全国所有县市的天气数据

  • 访问URL
  • 解析数据
  • 保存数据

所要用到的库

import requests
from lxml import etree
import xlwt

访问URL

这里我们要用xpath来解析数据,所以我们返回的网页数据格式为html
没学过xpath的可以看看这篇博客,写的还是很详细的
xpath链接
https://blog.csdn.net/u013332124/article/details/80621638

def ask_url(url):# 伪装请求头 header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"}response = requests.get(url, headers=header)# 以html格式返回数据html = etree.HTML(response.text)return html

解析数据

所要爬取的数据有一下

先是爬取每个省份URL的尾部,然后一个个访问。

def get_data(url):html = ask_url(url)base_url = 'http://www.weather.com.cn'province_name = []           # 省份名字# province_url = []          # 省份的URLcity_name = []             # 城市名称weather = []             # 天气现象wind_direction = []          # 风向wind_power = []                # 风力max_temperature = []       # 最高温min_temperature = []      # 最低温data = []                 # 数据汇总province_name_decode = html.xpath('//div[@class="lqcontentBoxheader"]//a[@target="_blank"]/text()')for i in range(len(province_name_decode)):# print(province_name_decode[i].encode('raw_unicode_escape').decode())province_name.append(province_name_decode[i].encode('raw_unicode_escape').decode())province_url = html.xpath('//div[@class="lqcontentBoxheader"]//a[@target="_blank"]/@href')           # 省份的URL# print(province_url)for j in range(len(province_url)):# for j in range(0, 1):temp_url = base_url + province_url[j]province_html = ask_url(temp_url)# 城市名称city_name_decode = province_html.xpath('//div[@class="hanml"]/div[1]//td[contains(@width, "83") and contains(@height, "23")]/a[1]/text()')for n in range(len(city_name_decode)):# print(city_name_decode[n].encode('raw_unicode_escape').decode())city_name.append(city_name_decode[n].encode('raw_unicode_escape').decode())# 天气现象weather_decode = province_html.xpath('//div[@class="hanml"]/div[1]//div[@class="conMidtab3"]//td[@width="89"]/text()')for n in range(len(weather_decode)):# print(weather_decode[n].encode('raw_unicode_escape').decode())weather.append(weather_decode[n].encode('raw_unicode_escape').decode())# 风向和风力wind_direction_decode = province_html.xpath('//div[@class="hanml"]/div[1]//div[@class="conMidtab3"]//td[@width="162"]/span[1]/text()')for n in range(len(wind_direction_decode)):# print(wind_direction_decode[n].encode('raw_unicode_escape').decode())wind_direction.append(wind_direction_decode[n].encode('raw_unicode_escape').decode())wind_power_decode = province_html.xpath('//div[@class="hanml"]/div[1]//div[@class="conMidtab3"]//td[@width="162"]/span[@class="conMidtabright"]/text()')for n in range(len(wind_power_decode)):# print(wind_power_decode[n].encode('raw_unicode_escape').decode())wind_power.append(wind_power_decode[n].encode('raw_unicode_escape').decode())# 最高温max_temperature_decode = province_html.xpath('//div[@class="hanml"]/div[1]//div[@class="conMidtab3"]//td[@width="92"]/text()')for n in range(len(max_temperature_decode)):# print(max_temperature_decode[n])max_temperature.append(max_temperature_decode[n])# 最低温min_temperature_decode = province_html.xpath('//div[@class="hanml"]/div[1]//div[@class="conMidtab3"]//td[@width="86"]/text()')for n in range(len(min_temperature_decode)):# print(min_temperature_decode[n])min_temperature.append(min_temperature_decode[n])data.append(city_name)data.append(weather)data.append(wind_direction)data.append(wind_power)data.append(max_temperature)data.append(min_temperature)return data

保存数据

保存成excel文件

def save_data(data, save_path):"""保存数据:param data::return:"""# 创建workbook对象workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)sheet = workbook.add_sheet('天气', cell_overwrite_ok=True)  # 创建工作表col = ('城市名', '天气', '风向', '风力', '最高温', '最低温')for i in range(len(col)):sheet.write(0, i, col[i])print("正在下载第%d列数据" % (i + 1))for j in range(len(data[0])):sheet.write(j + 1, 0, data[0][j])for j in range(len(data[1])):sheet.write(j + 1, 1, data[1][j])for j in range(len(data[2])):sheet.write(j + 1, 2, data[2][j])for j in range(len(data[3])):sheet.write(j + 1, 3, data[3][j])for j in range(len(data[4])):sheet.write(j + 1, 4, data[4][j])for j in range(len(data[5])):sheet.write(j + 1, 5, data[5][j])workbook.save(save_path)

得到的结果截图

完整的代码稍后给链接

[python爬虫]爬取天气网全国所有县市的天气数据相关推荐

  1. 在当当买了python怎么下载源代码-python爬虫爬取当当网

    [实例简介]python爬虫爬取当当网 [实例截图] [核心代码] ''' Function: 当当网图书爬虫 Author: Charles 微信公众号: Charles的皮卡丘 ''' impor ...

  2. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  3. python爬虫爬取知网

    python爬虫爬取知网 话不多说,直接上代码! import requests import re import time import xlrd from xlrd import open_wor ...

  4. Python爬虫爬取东方财富网的股票信息

    简单的Python爬虫应用 目标:爬取东方财富网的股票信息 1.先找到要爬取的网页 2.第二步开始爬取信息 2.1 通过requests获取网页信息 2.2再通过BeautifulSoup解析: 2. ...

  5. python爬虫爬取慕课网中的图片

    我们简单地爬取慕课网中免费课程下的第一页的图片,如想爬取多页图片,可以添加for循环自行实现 python版本:3.6.5 爬取网址:http://www.imooc.com/course/list ...

  6. python爬虫爬取东方财富网股票走势+一些信息

    一.目标 我们的目标是爬取东方财富网(https://www.eastmoney.com/)的股票信息 我的目标是爬取100张股票信息图片 经过实际测试我的爬取范围为000001-000110,000 ...

  7. [Python爬虫]爬取东方财富网公司公告需要注意的几个问题

    在上一篇文章中,以爬取东方财富网公司公告为例,介绍了如何爬取利用ajax加载的网页,以及如何模拟翻页.但是,在实际应用的过程中,发现了一些问题.接下来就来一一分析解决. 问题一.公告数量过多,后面的公 ...

  8. python爬虫-爬取当当网书籍信息存到Excel中

    文章目录 一.任务 二.分析 (一).单页面的信息分析 源代码分析 目标信息定位与分析 代码设计 (二).所有目标页面链接分析 目标链接分析 代码设计 三.注意要点 四.完整代码 五.参考 一.任务 ...

  9. python 爬虫 爬取当当网图书信息

    初次系统的学习python,在学习完基本语法后,对爬虫进行学习,现在对当当网进行爬取,爬取了基本图书信息,包括图书名.作者等 import requests from time import slee ...

最新文章

  1. Ubuntu 14.04使用命令行安装VirtualBox
  2. 获取mysql可行方法_Mysql学习Java实现获得MySQL数据库中所有表的记录总数可行方法...
  3. 第三次学JAVA再学不好就吃翔(part71)--BigDecimal类
  4. web mp4第一帧_Web成帧器就在这里!
  5. DCL并非单例模式专用
  6. Vue 进阶系列(一)之响应式原理及实现
  7. 自定义滚动条,可解决火狐滚动条默认样式修改不了问题
  8. 安装JDK 9与使用jshell
  9. 物化视图实践(1)----实现远程数据同步
  10. TypeScript算法专题 - blog4 - 单链表节点的两-两翻转(两两一组逆序)
  11. 使用wwise音效引擎的好处
  12. 基于node.js和Vue的音乐管理系统 /音乐网站的设计与实现
  13. smartdeblur(图片模糊处理工具) v2.2
  14. 关于CMOS摄像头的DVP接口的工作方式与一般使用方法
  15. eyoucms目录结构
  16. 新能源汽车前景广袤但痛点多多,大圆柱电池能否提供最优解?
  17. 伽罗华域(Galois Field)上的四则运算
  18. onblur()无限触发问题
  19. Matlab中int2str函数使用
  20. 论文复现-1:bertscore

热门文章

  1. android布局中使用图片,Android布局和图片使用规范
  2. execl 单元格颜色设置
  3. 从HTTP请求中获取客户IP地址
  4. matlab怎么输入一个数,matlab输入10个数
  5. Scratch编程与数学之小猫背九九乘法表口诀!
  6. 我,00后中专生,骗人买减肥药,我后悔了……
  7. Python之系统函数、自定义函数、模块、递归合集
  8. C语言 立方体随鼠标转动,HTML5 盒子悬停动效 - 立方体沿鼠标方向翻滚
  9. 华为鸿蒙手机海外版,腾讯内容开放平台
  10. 万国觉醒国服服务器未响应是什么意思,万国觉醒开服萌新常见问题有哪些