m0_57477479 2021-06-05 11:55 采纳率: 33.3%
浏览 30
已采纳

爬中国天气网遇到的一些问题

  1. import requests
    from bs4 import BeautifulSoup
    from pyecharts.charts import Bar
    
    ALL_DATA = []
    
    def parse_page(url,jiex):
        header = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; '
                          'Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36',
            # 'Referer': 'http://www.weather.com.cn/textFC/hb.shtml'
        } # 模拟浏览器
        response = requests.get(url=url, headers=header) # 发送get命令
        text = response.content.decode('utf-8')
        # text用requests库获取
        soup = BeautifulSoup(text,jiex) # 以lxml方式解析
        conMidtab = soup.find('div',class_='conMidtab')
        tables = conMidtab.find_all('table')
        for table in tables:
            trs = table.find_all('tr')[2:]
            for tr in trs:
                tds = tr.find_all('td')
                chengs = list(tds[-8].stripped_strings)[0] # 倒数第8列为城市信息
                maxtemp = list(tds[-5].stripped_strings)[0] # 倒数第5列为最高气温
                mintemp = list(tds[-2].stripped_strings)[0] # 倒数第2列为最低气温
                ALL_DATA.append({"城市":chengs,"最高气温":int(maxtemp),"最低气温":int(mintemp)})
    
    def main():
        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/xb.shtml',
            'http://www.weather.com.cn/textFC/xn.shtml'
        }
        for url in urls:
            parse_page(url,'lxml')
        url_gat = 'http://www.weather.com.cn/textFC/gat.shtml'
        parse_page(url_gat,'html5lib')#容错能力强的html5lib对港澳台进行解析
    
        # 分析数据
        ALL_DATA.sort(key=lambda data:data["最低气温"])
        min_data = ALL_DATA[:10]
        ALL_DATA.sort(key=lambda data:data["最高气温"])
        max_data = ALL_DATA[-10:-1]
        # 数据可视化
        cities_min = list(map(lambda x:x["城市"], min_data))
        cities_max = list(map(lambda x:x["城市"], max_data))
        min_temp = list(map(lambda x:x["最低气温"], min_data))
        max_temp = list(map(lambda x: x["最高气温"], max_data))
    
        bar1 = Bar()
        bar1.add_xaxis(cities_min)
        bar1.add_yaxis("气温/℃", min_temp)
        bar1.set_global_opts(title_opts={"text": "中国城市气温排行榜", "subtext": "最低气温"})
        bar1.render("最低气温.html")
        bar2 = Bar()
        bar2.add_xaxis(cities_max)
        bar2.add_yaxis("气温/℃", max_temp)
        bar2.set_global_opts(title_opts={"text": "中国城市气温排行榜", "subtext": "最高气温"})
        bar2.render("最高气温.html")
    
    
    if __name__ == '__main__':
        main()

然后出现了以下问题,求大神指点

我应该怎么改

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2021-06-05 15:55
    关注

    需要安装解析器html5lib库,先配置好环境变量,执行语句 pip install html5lib 安装。另外代码如不用html5lib解析的话,用其他解析器解析内容不全,会出现索引越界错误。

    如对解答满意,请点一下采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助