新手小试牛刀:爬取天气网数据

本文介绍了新手使用Python爬取天气网数据的过程,包括分析网页结构,获取城市名称和拼音,按照城市/年/月抓取历史天气数据,并将数据保存到CSV文件。在爬取过程中注意到了某些城市的特殊情况以及2012年5月1日前后的网页布局变化问题。
摘要由CSDN通过智能技术生成

基本思路

  1. 查看和分析天气网网页规律
  2. 获取城市名称(包括中文名和拼音)
  3. 按城市/年/月,获取历史天气数据
  4. 将数据保存至csv

分析网页规律

点进某城市、某年某月,以北京2019年12月为例,链接为:
http://lishi.tianqi.com/beijing/201912.html
可以发现网页规律为:
http://lishi.tianqi.com/城市名拼音/年月.html
对应的url拼接的代码为:

for c in city:
    for y in year:
        for m in month:
            url = 'http://lishi.tianqi.com/' + c + '/20' + y + m + '.html'

年和月可以自己定义列表,但是城市名拼音需要从网站获取,所以,进入下一步。

获取城市名称

打开天气网历史天气首页,摁F12进行html分析,发现:
在这里插入图片描述
为此,准备两个政策表达式,用于后续分析:

find_city = re.compile(r'<a href="(.*?)/index.html"')
find_name = re.compile(r'历史天气">(.*?)</a>')

然后,根据上述式子,来分析html的内容,代码片段如下:

for item in soup.find_all('ul', class_="table_list"):
    data = []
    for each_city in item.find_all('li'):
        city_info = str(each_city)
        one_city = re.findall(find_city, city_info)
        one_name = re.findall(find_name, city_info)
        if len(one_city) > 0:
            data.extend(one_city)
            data.extend(one_name)

获取天气数据

北京市2019年12月为例,打开网页摁F12,发现有用的信息都整齐排列着呢:
在这里插入图片描述
同样,准备正则表达式:

find_date = re.compile(r'<div>(.*?)</div>')
find_high = re.compile(r'<div style="width: 100px">(\d*)</div>')
find_wind = re.compile(r'<div style="width:200px;">(.*?)</div>')

爬取数据的代码,请看【完整代码】。

保存csv数据

一开始,尝试保存xls,但是数据太多,超出了xls的范围,所以临时学了下怎么保存csv。代码请看下文。

完整代码

from bs4 import BeautifulSoup
import re
import urllib.request, urllib.error
import time
import pandas as pd

year = ['11', '12', '13', '14', '15', '16', '17', '18', '19']
month = ['01', '02', &
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值