ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

小试--天气预报

2020-12-08 14:33:52  阅读:198  来源: 互联网

标签:www cn -- html5lib 天气预报 weather 小试 com td


  1. 需求分析:爬取全中国所有城市以及对应的温度

  2. 用到的知识点:
    a: BeautifulSoup 、html5lib、lxml
    b:安装:1.pip install lxml
    2.pip install bs4
    3.pip install html5lib

  3. 分析网页:在这里插入图片描述

  4. 解析网页,一层一层拿取数据标签,先获取conMidtab

  5. 难点在于直辖市和省份的问题,可通过判断下标索引值来取第1个值:在这里插入图片描述

  6. 港澳台页面源码的问题:可用‘html5lib’替换‘lxml’,两者的功能对比自行百度在这里插入图片描述在这里插入图片描述

# 需求:爬取全中国所有城市以及对应的温度

# 第一个 分析页面结构
# 第二个 直辖市和省份问题 通过判断下标索引值来取第1个值
# 第三个 网页标签问题 soup = BeautifulSoup(text,'html5lib')

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/79.0.3945.88 Safari/537.36'
    }
    response = requests.get(url, headers=headers)

    # print(response.content.decode('utf-8'))
    html = response.content.decode('utf-8')

    # 解析网页,一层一层拿取数据标签
    # 先获取conMidtab 这个div标签 pip install html5lib
    soup = BeautifulSoup(html, 'html5lib')    # 对比‘lxml’--'html5lib'
    conMidtab = soup.find('div', class_ = 'conMidtab')
    # 找到所有的table标签
    tables = conMidtab.find_all('table')

    # 遍历
    for table in tables:
         
        # 找到所有tr标签,过滤掉前2个
        trs = table.find_all('tr')[2:]
        # enumerate(trs) 返回2个值 第一个是下标索引 第二个是下标索引所 对应的值
        for index,tr in enumerate(trs):

            # 找td标签里面的城市和对应温度
            tds = tr.find_all('td')

            city_td = tds[0]

            # 解决直辖市和省份问题 通过判断下标索引值来取第1个值
            if index == 0:
                city_td = tds[1] # 直辖市也OK 省会更OK

            temp_td = tds[-2]

            city = list(city_td.stripped_strings)[0] # 城市
            temp = list(temp_td.stripped_strings)[0] # 温度
            print('城市:',city,'温度:',temp)

            # print(city_td)



def main():

    # url = 'http://www.weather.com.cn/textFC/gat.shtml'
    # url = 'http://www.weather.com.cn/textFC/hb.shtml'

    # kw = input('请输入城市缩写:')
    # baseurl = 'http://www.weather.com.cn/textFC/kw.shtml'

    urls = ['http://www.weather.com.cn/textFC/hb.shtml','http://www.weather.com.cn/textFC/db.shtml','http://www.weather.com.cn/textFC/gat.shtml']
    for url in urls:

        parse_page(url)


if __name__ == '__main__':
    main()

标签:www,cn,--,html5lib,天气预报,weather,小试,com,td
来源: https://blog.csdn.net/m0_50883776/article/details/110871655

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有