小试--天气预报

  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()
上一篇:mattermost的记载技巧


下一篇:《深入浅出强化学习原理入门》学习笔记(六)基于时间差分的强化学习方法(重点为Qlearning)