20231120_python练习_天气网爬取城市近七天温度情况

先根据城市名找到对应编码,然后获取近七天天气情况

淄博 101120301 ['20日(今天)'] ['晴'] <class 'list'> ['7℃'] ['\n', '<3级', '\n']

淄博 101120301 ['21日(明天)'] ['晴转阴'] <class 'list'> ['20℃', '8℃'] ['\n', '<3级', '\n']

淄博 101120301 ['22日(后天)'] ['多云'] <class 'list'> ['17℃', '3℃'] ['\n', '<3级', '\n']

淄博 101120301 ['23日(周四)'] ['晴'] <class 'list'> ['8℃', '-5℃'] ['\n', '3-4级转<3级', '\n']

淄博 101120301 ['24日(周五)'] ['晴转多云'] <class 'list'> ['5℃', '-5℃'] ['\n', '<3级', '\n']

淄博 101120301 ['25日(周六)'] ['阴转多云'] <class 'list'> ['9℃', '0℃'] ['\n', '<3级', '\n']

淄博 101120301 ['26日(周日)'] ['晴'] <class 'list'> ['12℃', '-2℃'] ['\n', '<3级', '\n']

复制代码
import requests
import json
from lxml import etree

city_dic = {}
text_mw = '淄博'
#将中文转置为字符
text_id = str(text_mw.encode('utf-8')).upper().replace('\\X','%')[2:-1]
print('text_id',text_id)

url = 'http://toy1.weather.com.cn/search?cityname=' + text_id
#设置请求头
header={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.43",
    "Referer":"http://www.weather.com.cn/", 
    "Cookie":"Hm_lvt_080dabacb001ad3dc8b9b9049b36d43b=1700397713; f_city=%E6%B5%8E%E5%8D%97%7C101120101%7C; Hm_lpvt_080dabacb001ad3dc8b9b9049b36d43b=1700398953"
}
resp = requests.get(url=url,headers=header)
print(resp.status_code)

data = resp.text[1:-1]
json_data = json.loads(data)[0]['ref'][0:9]
#获取城市对应编码
print(json_data)
#淄博 101120301
city_url = 'http://www.weather.com.cn/weather/' + json_data + '.shtml'
print(city_url)
city_resp = requests.get(url=city_url,headers=header)
city_resp.encoding = city_resp.apparent_encoding
html = etree.HTML(city_resp.text)
node_all = html.xpath('//ul[@class="t clearfix"]/li')
#print('节点名称',[i.tag for i in node_all])
for node in node_all:
    day_text = node.xpath('.//h1/text()')
    wea_text = node.xpath('.//p[@class="wea"]/text()')
    tem_text = node.xpath('.//p[@class="tem"]//text()')
    for tem in tem_text:
        if tem in ('/','\n'):tem_text.remove(tem)
    win_text = node.xpath('.//p[@class="win"]//text()')
    for win in win_text:
        if win in ('/','\n'):win_text.remove(win)
    print(text_mw,json_data,day_text,wea_text,type(tem_text),tem_text,win_text)
相关推荐
adsadswee1 分钟前
Qt 样式与 QLinearGradient 渐变详解
开发语言·qt·qt样式表·qlineargradient·qss渐变效果
花月C26 分钟前
个性化推荐:基于用户的协同过滤算法
开发语言·后端·算法·近邻算法
脾气有点小暴35 分钟前
前端页面跳转的核心区别与实战指南
开发语言·前端·javascript
rit84324991 小时前
基于MATLAB的BP神经网络手写数字识别
开发语言·神经网络·matlab
独行soc1 小时前
2025年渗透测试面试题总结-275(题目+回答)
网络·python·安全·web安全·网络安全·渗透测试·安全狮
San30.2 小时前
深入 JavaScript 内存机制:从栈与堆到闭包的底层原理
开发语言·javascript·udp
灰灰勇闯IT2 小时前
RN路由与状态管理:打造多页面应用
开发语言·学习·rn路由状态
wd_cloud2 小时前
QT/6.7.2/Creator编译Windows64 MySQL驱动
开发语言·qt·mysql
亭上秋和景清2 小时前
指针进阶:函数指针详解
开发语言·c++·算法
胡萝卜3.02 小时前
C++现代模板编程核心技术精解:从类型分类、引用折叠、完美转发的内在原理,到可变模板参数的基本语法、包扩展机制及emplace接口的底层实现
开发语言·c++·人工智能·机器学习·完美转发·引用折叠·可变模板参数