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)
相关推荐
段一凡-华北理工大学4 小时前
工业智能体:从Codex/Claude到项目实战~系列文章05:从“AI助手“到“工业智能体“:能力跃迁与落地范式
人工智能·python·claude·codex·工业智能体·高炉炼铁智能化
深蓝AI4 小时前
ContextVar 到线程池就丢了?asyncio.to_thread 和 run_in_executor 实测
python
岁月宁静5 小时前
什么是 Agent:从"会聊天"到"会做事"
人工智能·python
岁月宁静6 小时前
AI 应用开发工程师简历怎么写:HR 初筛、技术复筛、面试追问,三道关卡各看什么?
人工智能·python·面试
来让爷抱一个6 小时前
Python 异步里混用同步库,事件循环被卡住的全过程
开发语言·python
小肝一下8 小时前
3.基础语法(3)
python
深蓝AI8 小时前
Python 子进程树:父进程被杀后,孙进程为何还在跑?
python
心祭丫丫9 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱你真是太好了9 小时前
Skill 索引瘦身与渐进加载
python
贾公子9 小时前
检测链路的容量规划——用 Little's Law 算清 QPS、并发与积压
后端·python