Go实现爬取城市七天内的天气

简介: 代码仅供参考学习使用
packagemainimport (
"flag""github.com/go-rod/rod""log")
const (
nationwideUrl="https://www.tianqi.com/chinacity.html")
funcmain() {
varcity=flag.String("c", "", "the config file")
flag.Parse()
url :=cityUrl(*city)
ifurl=="" {
log.Fatalf("url is empty")
return    }
weatherData(url)
}
funcweatherData(urlstring) {
page :=rod.New().MustConnect().MustPage(url)
//直接使用选择器选择七天天气内容体projects :=page.MustElement("ul.weaul").MustElements("li")
for_, project :=rangeprojects {
var (
datestringweatherstringcentigradestring        )
//获取日期ifok, dateEle, _ :=project.Has(".weaul_q"); ok {
ifdateEle.MustHas(".fl") {
date=dateEle.MustElement(".fl").MustText()
            }
        }
for_, weatherEle :=rangeproject.MustElements(".weaul_z") {
//如果存在span则是温度 否则是天气情况ifweatherEle.MustHas("span") {
var (
startCstringendCstring                )
//获取温度fork, cEle :=rangeweatherEle.MustElements("span") {
ifk==0 {
startC=cEle.MustText()
                    } else {
endC=cEle.MustText()
                    }
                }
centigrade=startC+"~"+endC            } else {
weather=weatherEle.MustText()
            }
        }
log.Printf("日期:%s|天气:%s|摄氏度:%s℃\n", date, weather, centigrade)
    }
}
funccityUrl(citystring) string {
cityMap :=make(map[string]string)
page :=rod.New().MustConnect().MustPage(nationwideUrl)
provinceProjects :=page.MustElement(".citybox").MustElements("h2")
cityProjects :=page.MustElement(".citybox").MustElements("span")
for_, section :=rangeprovinceProjects {
cityMap[section.MustElement("a").MustText()] =section.MustElement("a").MustProperty("href").String()
    }
for_, section :=rangecityProjects {
for_, a :=rangesection.MustElements("a") {
cityMap[a.MustText()] =a.MustProperty("href").String()
        }
    }
ifhref, ok :=cityMap[city]; ok {
returnhref+"7/"    }
return""}

说明:

1、新增文件夹

2、新增文件main.go

3、复制代码

4、初始化mod: go mod init weather

5、拉取依赖 go mod tidy

6、 运行:go run main.go -c 城市名 如 :go run main.go -c 河南


运行结果如下:

2023/06/29 16:39:30 日期:06-29|天气:阴|摄氏度:28~36℃

2023/06/29 16:39:30 日期:06-30|天气:小雨到中雨|摄氏度:26~29℃

2023/06/29 16:39:30 日期:07-01|天气:多云转阴|摄氏度:26~32℃

2023/06/29 16:39:30 日期:07-02|天气:小雨|摄氏度:27~32℃

2023/06/29 16:39:30 日期:07-03|天气:小雨转阴|摄氏度:27~34℃

2023/06/29 16:39:30 日期:07-04|天气:阴转雨|摄氏度:27~35℃

2023/06/29 16:39:30 日期:07-05|天气:小雨转多云|摄氏度:24~32℃


目录
相关文章
|
数据采集 JavaScript 数据安全/隐私保护
「Python」爬虫实战-北京公交线路信息爬取(requests+bs4)
使用requests爬取北京公交线路信息,目标网址为[https://beijing.8684.cn/](https://beijing.8684.cn/)。 爬取的具体信息为公交线路名称、公交的运营范围、运行时间、参考票价、公交所属的公司以及服务热线、公交来回线路的途径站点。
2351 0
|
3月前
|
数据采集
以“股票代码实时抓取股票信息”为例的爬虫案例
爬虫—根据股票代码实时抓取股票信息
127 0
|
8月前
|
JSON API 数据格式
使用Python 获取天气数据
使用Python 获取天气数据
166 2
|
8月前
|
开发工具
查询天气预报案例
这是一个关于如何查询天气预报的步骤指南,包括五个步骤:找到阿里云的天气服务、购买服务、获取AppCode和秘钥、参考SDK调用接口以及使用Hutool工具进行接口调用。提供了详细的操作截图和接口返回的示例数据。完整文档链接可在文中找到。
310 4
|
8月前
|
Python
python天气预报信息
python天气预报信息
|
Python
python 进行西安2023年天气信息,分析天气趋势预测 数据代码评论区自取
python 进行西安2023年天气信息,分析天气趋势预测 数据代码评论区自取
81 0
|
数据采集 JSON 数据可视化
用Python爬取分析【某东618】畅销商品销量数据,带你看看大家都喜欢买什么!
618购物节,辰哥准备分析一波购物节大家都喜欢买什么?本文以某东为例,Python**爬取**618活动的畅销商品数据,并进行**数据清洗**,最后以**可视化**的方式从不同角度去了解畅销商品中,名列前茅的商品是哪些?销售数据如何?用户好评如何?等等
379 0
|
存储 数据采集 数据可视化
【数据采集】使用scrapy采集天气网、豆瓣数据信息
第三次实验 实验 1 1.1 题目 1.2 思路 1.2.1 发送请求 1.2.2 解析网页 1.2.3 获取结点 1.2.4 数据保存 (单线程) 1.2.4 数据保存 (多线程) 实验 2 2.1 题目 2.2 思路 2.2.1 setting.py 2.2.2 item.py 2.2.3 wt_Spider.py 2.2.4 pipelines.py 实验 3 3.1 题目 3.2 思路 3.2.1 setting.py 3.2.2 item.py 3.2.3 db_Spider.py 3.2.4 pipelines.py 福利
140 0
【数据采集】使用scrapy采集天气网、豆瓣数据信息
|
JSON 数据格式 Python
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
Crawler:基于requests库+json库+40行代码实现爬取猫眼榜单TOP100榜电影名称主要信息
|
JSON API 数据格式
Py:利用pickle模块和API天气接口实现输入城市得到该城市的天气预报
Py:利用pickle模块和API天气接口实现输入城市得到该城市的天气预报