其他分享
首页 > 其他分享> > 小试--天气预报

小试--天气预报

作者:互联网

  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