用bs4爬取城市空气质量排行网站示例

一、爬取主要思路:

本次爬取选择了Python的bs4解析器的select方法解析出排名、城市名、空气质量指数。通过浏览器开发者工具定位到标签li与span。提取分两步,先取外层的li,再遍历li去取span。观察发现排名是在span[0]中,空气质量指数是在span[3]中。城市名是在li标签下面的a标签中。

二、示例代码:

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                  'Chrome/83.0.4103.116 Safari/537.36'}
city_name_list = []
city_num_list = []
air_index_list = []


def get_html_text(url):
    try:
        res = requests.get(url, headers=headers)
        res.raise_for_status()
        res.encoding = 'utf-8'
        return res.text
    except:
        print('response error!')


def fill_weather(soup):
    size = len(soup.select('li.clearfix'))
    print(size)

    for li_a in soup.select('li.clearfix a'):
        city_name_list.append(li_a.text)
    # print(city_name_list)
    for li in soup.select('li.clearfix'):
        li_span = li.select('span')[0]
        city_num_list.append(li_span.text)
    # print(city_num_list)
    for li in soup.select('li.clearfix'):
        li_span = li.select('span')[3]
        air_index_list.append(li_span.text)


if __name__ == '__main__':
    url = 'https://www.tianqi.com/air'
    html = get_html_text(url)
    soup = BeautifulSoup(html, 'html.parser')
    fill_weather(soup)
    print('排名', '城市', '空气指数', )
    for i in zip(city_num_list, city_name_list, air_index_list):
        print(i)

三、补充解读:

示例代码即将结束时,用到了函数zip()。zip函数可以将可迭代的列表对象作为参数,将列表中对应的元素打包成一个个元组,然后返回由元组组成的列表。

你可能感兴趣的:(信息可视化)