吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6030|回复: 12
收起左侧

[Python 转载] 爬取中国天气网数据

  [复制链接]
牵手丶若相惜 发表于 2019-11-21 12:51
本帖最后由 牵手丶若相惜 于 2020-11-12 17:05 编辑

中国天气网的robots协议 允许所有爬虫爬取数据
______________________
爬取中国气象网的每个地区七天的天气
但是我只爬取了每个城市的最低温度 没去爬取最高温度
最高温度留给你们  学习爬虫的可以试着添加一下
刚学习爬虫的可以参考一下 还可以优化
源码如下:
[Python] 纯文本查看 复制代码
import requests
from bs4 import BeautifulSoup

# 浏览器代{过}{滤}理
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36"
}


# 获取该url地址下的源码
def get_url(url):
    data = requests.get(url, headers=headers).content.decode("utf-8")
    # 使用html5lib 容错率较高
    soup = BeautifulSoup(data, "html5lib")
    return soup


# 通过网页源码匹配该地区的七天天气的html源码
def gain_data(soup):
    hanmls = soup.find("div", class_="hanml")
    # 匹配到存放所有天数温度的div标签下的数据
    conmidtabs = hanmls.find_all("div", class_="conMidtab")
    return conmidtabs


# 通过网页源码匹配是哪七天
def gain_day():
    url = "http://www.weather.com.cn/textFC/hb.shtml"
    soup = get_url(url)
    day = []
    days = list(soup.find("ul", class_="day_tabs").stripped_strings)
    for Current in days:
        day.append(Current)
    return day


# 获取每天的数据
def gain_table(conmidtab):
    tabs = conmidtab.find_all("table")
    # 用来存放遍历的数据
    y = {}
    # 遍历当天该地区的所有城市
    for tab in tabs:
        # 因为前两个是表头 所以从第三个获取每个省的城市的名字和温度
        trs = tab.find_all("tr")[2:]
        for tr in trs:
            # 提取城市name
            citys = list(tr.find("td", width="83").stripped_strings)[0]
            # 提取城市min_tmparetrue
            tmps = list(tr.find("td", width="86").stripped_strings)[0]
            # 把城市名作为key,温度作为value
            y[citys] = int(tmps)
            # 把字典y中的数据存放到该数组中
    return y


# 把数据到本地
def write_file(regions, lis1_index):
    lis1 = ["华北", "东北", "华东", "华中", "华南", "西北", "西南", "港澳台"]
    with open("d:/中国天气1.txt", "a", encoding="utf-8") as fp:
        # 把日期写到最前面
        fp.write(("地区:" + lis1[lis1_index] + "\n"))
        # 遍历regions,keys为当前日期,values是当前地区的所有市的名字和最低气温
        for keys, values in regions.items():
            fp.write((keys + "\n"))
            # 遍历values,key为城市名称,value为该城市的最低温度
            for key, value in values.items():
                fp.write((key + ":" + str(value) + "\t"))
            fp.write("\n\n")


if __name__ == '__main__':
    # 用来存放该地区七天的温度
    current_temperature = []
    partitions = ["hb", "db", "hd", "hz", "hn", "xb", "xn", "gat"]
    prefix = "http://www.weather.com.cn/textFC/"
    # 获取七天的日期 days是个列表
    days = gain_day()
    # 用来存放该地区每天的温度
    regions = {}
    # 用来作为write_file函数里的lis1的下标
    lis1_index = 0
    # 遍历 所有的地区 华北,华东等等
    for partition in partitions:
        url = prefix + partition + ".shtml"
        # 调用get_url获取源码
        soup = get_url(url)
        # 调用gain_data 获取到七天天气的源码
        conmidtabs = gain_data(soup)
        # 作为days数组的下标
        day_index = 0
        # 把七天的数据依次传递 获取每天的数据
        for conmidtab in conmidtabs:
            data = gain_table(conmidtab)
            # 日期为key 当前地区的所有城市和最低温度为value
            regions[days[day_index]] = data
            day_index += 1

        # 调用写入的函数把 regions 里的数据写到本地
        write_file(regions, lis1_index)
        # 每更换一个地区下标加1
        lis1_index += 1

网站数据

网站数据

保存下来的数据

保存下来的数据

免费评分

参与人数 7吾爱币 +6 热心值 +6 收起 理由
名字只是代号 + 1 除了python,还需要什么软件把放在本地?
张晨曦 + 1 学习可以,但别拿来商用。http://www.weather.com.cn/wzfw/bqsm/
lfm107 + 1 + 1 我很赞同!
TQhql + 1 + 1 **,我要学编程
人生苦短丶 + 1 + 1 我很赞同!
SkyMoons + 1 + 1 热心回复!
lizi002002 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

ibrucekong 发表于 2019-11-21 13:58
python真的很方便,特别是做学术研究的,国外数据都不像国内给统计好,打包下载,老外的都是一个个去点,然后自己记录,很烦人的;而会了python,整个事情就很愉快了
Nemoris丶 发表于 2019-11-21 13:37
huangzy97 发表于 2019-11-21 13:39
龙王的猫 发表于 2019-11-21 13:45
用什么软件写的代码吖,小白
Ralph 发表于 2019-11-21 14:15
很强,可以拿去做应用了
头像被屏蔽
神秘高手Mars偉 发表于 2019-11-21 15:01
提示: 作者被禁止或删除 内容自动屏蔽
cj13888 发表于 2019-11-21 16:11
学习借鉴一下,谢谢分享
头像被屏蔽
cayne 发表于 2019-11-21 17:29
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 牵手丶若相惜 发表于 2019-11-22 11:58
龙王的猫 发表于 2019-11-21 13:45
用什么软件写的代码吖,小白

python写的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 21:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表