吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1890|回复: 14
收起左侧

[Python 转载] 爬虫-获取城市的历史天气

  [复制链接]
lgb446023743 发表于 2023-6-25 21:38
学习网上的一个案列:
知识点:
while 循环
for 循环
xpath使用
request使用
列表推导
[Python] 纯文本查看 复制代码
# -*- coding: utf-8 -*-

import csv
import requests
from lxml import etree


def getWeather(url):
    weather_info = []
    # 模拟浏览器访问头部
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0'}
    # 取回Html数据
    resp = requests.get(url, headers=headers)
    # 数据预处理
    resp_html = etree.HTML(resp.text)
    # xpath 处理数据
    # class="thrui"
    resp_list = resp_html.xpath("//ul[@class='thrui']/li")
    for li in resp_list:
        day_weather_info = {}
        # 日期
        day_weather_info['data_time'] = li.xpath("./div[1]/text()")[0].split(' ')[0]
        # 最高天气
        high = li.xpath("./div[2]/text()")[0]
        day_weather_info['high'] = high[:high.find('℃')]
        # 最低天气
        low = li.xpath("./div[3]/text()")[0]
        day_weather_info['low'] = low[:low.find('℃')]
        # 天气
        day_weather_info['weaher'] = li.xpath("./div[4]/text()")[0]
        weather_info.append(day_weather_info)
    return weather_info


weathers = []
# for 循环生成月份信息,即1-12
for month in range(1, 13):
    # 获取某一天的天所信息
    # 三元表达式
    weather_time = '2022' + ('0' + str(month) if month < 10 else str(month))
    print(weather_time)
    url = f'https://lishi.tianqi.com/zhongshanqu1/{weather_time}.html'
    # 使用getWeather爬取数据
    weather = getWeather(url)
    # 存到列表中
    weathers.append(weather)
print(weathers)

# 数据一次性写入
with open("weather_uft-8.csv", "w", newline='', encoding='utf-8') as csvsave:
    writer = csv.writer(csvsave)
    # 先写入列名:columns_name 日期,最高天气,最低天所,天气
    writer.writerow(['日期', '最高天所', '最低天所', '天气'])
    # 一次写入多行用writerows(写入的数据类型是列表,一个列表对应一行)
    # [{'data_time': '2022-01-01', 'high': '6', 'low': '-7', 'weaher': '晴'}]
    writer.writerows(
        [list(day_weather_dict.values()) for monther_weathers in weathers for day_weather_dict in monther_weathers])

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

jessylake 发表于 2023-6-26 09:26
lgb446023743 发表于 2023-6-26 09:14
这个是导出的文件是UFT-8,你打开的文件软件也要支持才行

打开的软件不就是excel吗,我估计跟编辑器有关吧,我用的是适合初学者的 thonny,不知你用的是什么,pycharm?
TheKingOfKiller 发表于 2023-6-25 23:00
灬番蛮灬 发表于 2023-6-26 00:33
jessylake 发表于 2023-6-26 08:26
数据成功抓出来了,但excel文件中中文显示乱码?
 楼主| lgb446023743 发表于 2023-6-26 08:38
jessylake 发表于 2023-6-26 08:26
数据成功抓出来了,但excel文件中中文显示乱码?

尝试修改文件编码
rjyq168 发表于 2023-6-26 08:45
请问代码怎么样使用?
 楼主| lgb446023743 发表于 2023-6-26 08:47
rjyq168 发表于 2023-6-26 08:45
请问代码怎么样使用?

你问这个问题,先找本Python编程 入门与实践第二版 学习
jessylake 发表于 2023-6-26 08:51

怎么改,你不是已经设置成utf-8了吗
jessylake 发表于 2023-6-26 08:58

我把 utf-8 改成 utf-8-sig 就ok 了,但没明白你那里不用改也显示正常吗?
 楼主| lgb446023743 发表于 2023-6-26 09:14
jessylake 发表于 2023-6-26 08:51
怎么改,你不是已经设置成utf-8了吗

这个是导出的文件是UFT-8,你打开的文件软件也要支持才行
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 22:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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