鱼C论坛

 找回密码
 立即注册
查看: 2827|回复: 5

爬取天气导入csv时数据缺少

[复制链接]
发表于 2023-1-5 11:21:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

import requests
from bs4 import BeautifulSoup
import csv
header = ('城市', '高温', '低温')


def parse_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/108.0.1462.54 Safari/537.36',
    }

    response = requests.get(url, headers=headers)
    text = response.content.decode('utf-8')
    soup = BeautifulSoup(text, 'html5lib')
    conMidtab = soup.find('div', class_='conMidtab')
    tables = conMidtab.find_all('table')
    lst = []
    for table in tables:
        trs = table.find_all('tr')[2:]
        for index, tr in enumerate(trs):
            tds = tr.find_all('td')
            city_td = tds[0]  # 城市
            if index == 0:
                city_td = tds[1]
            info = {}
            city = list(city_td.stripped_strings)[0]  # 只要文本
            temp_max_td = tds[-5]  # 最高温度
            temp_max = list(temp_max_td.stripped_strings)[0]
            temp_min_td = tds[-2]  # 最低温度
            temp_min = list(temp_min_td.stripped_strings)[0]
            info['城市'] = city
            info['高温'] = temp_max + '℃'
            info['低温'] = temp_min + '℃'
            lst.append(info)
        return lst


def writedata(lst):
    with open('weather.csv', 'w', encoding='utf-8', newline='') as file_obj:
        writer = csv.DictWriter(file_obj, fieldnames=header)
        writer.writeheader()
        writer.writerows(lst)


def main():
    lst = []
    urls = ['http://www.weather.com.cn/textFC/hb.shtml',  # 华北地区
            'http://www.weather.com.cn/textFC/db.shtml',  # 东北地区
            'http://www.weather.com.cn/textFC/hd.shtml',  # 华东地区
            'http://www.weather.com.cn/textFC/hz.shtml',  # 华中地区
            'http://www.weather.com.cn/textFC/hn.shtml',  # 华南
            'http://www.weather.com.cn/textFC/xn.shtml',  # 西南
            'http://www.weather.com.cn/textFC/xb.shtml',  # 西北
            'http://www.weather.com.cn/textFC/gat.shtml']
    for url in urls:
        lst += parse_page(url)
    writedata(lst)


if __name__ == '__main__':
    main()



不导出csv的时候数据是全的,但是导出去的时候发现只有一部分数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-1-5 11:50:45 | 显示全部楼层
在pycharm打印结果是463个城市,但是导出csv的时候只有112条
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-5 12:46:00 | 显示全部楼层
def writedata(lst):
    print(len(lst))  # 这打印就是112个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-5 13:21:13 | 显示全部楼层
suchocolate 发表于 2023-1-5 12:46
def writedata(lst):
    print(len(lst))  # 这打印就是112个

是哪里出问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-5 13:24:04 | 显示全部楼层
suchocolate 发表于 2023-1-5 12:46
def writedata(lst):
    print(len(lst))  # 这打印就是112个

import requests
from bs4 import BeautifulSoup


def parse_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/108.0.1462.54 Safari/537.36',
    }

    response = requests.get(url, headers=headers)
    text = response.content.decode('utf-8')
    soup = BeautifulSoup(text, 'html5lib')
    conMidtab = soup.find('div', class_='conMidtab')
    tables = conMidtab.find_all('table')
    for table in tables:
        trs = table.find_all('tr')[2:]
        for index, tr in enumerate(trs):
            tds = tr.find_all('td')
            city_td = tds[0]  # 城市
            if index == 0:
                city_td = tds[1]
            city = list(city_td.stripped_strings)[0]  # 只要文本
            temp_max_td = tds[-5]  # 最高温度
            temp_max = list(temp_max_td.stripped_strings)[0]
            temp_min_td = tds[-2]  # 最低温度
            temp_min = list(temp_min_td.stripped_strings)[0]
            print(city, temp_max + '℃', temp_min + '℃')


def main():
    # lst = []
    urls = ['http://www.weather.com.cn/textFC/hb.shtml',  # 华北地区
            'http://www.weather.com.cn/textFC/db.shtml',  # 东北地区
            'http://www.weather.com.cn/textFC/hd.shtml',  # 华东地区
            'http://www.weather.com.cn/textFC/hz.shtml',  # 华中地区
            'http://www.weather.com.cn/textFC/hn.shtml',  # 华南
            'http://www.weather.com.cn/textFC/xn.shtml',  # 西南
            'http://www.weather.com.cn/textFC/xb.shtml',  # 西北
            'http://www.weather.com.cn/textFC/gat.shtml']  # 港澳台地区

    for url in urls:
        # 调用函数
        parse_page(url)


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-6 09:02:59 | 显示全部楼层
有大佬吗,新人请教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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