1. 程式人生 > >python匿名函式的使用

python匿名函式的使用

1. enumerate()方法可以同時拿到index和value。

2. python匿名函式,lambda表示式,可以簡化程式碼。詳見2.2視覺化過程。

3. map()函式返回的是map型別,需要轉換成list型別。

示例程式碼如下:

# coding:utf-8

import requests
from bs4 import BeautifulSoup
import json
from pyecharts import Bar
ALL_DATA = []

def parse_page(url):
    # 1.get方法請求網頁
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36"
    }
    response = requests.get(url, headers=headers)
    text = response.content
    # 2.BeautifulSoup方法解析html
    # lxml解析器:容錯能力一般。html5lib解析器:相當於瀏覽器自帶的解析器,容錯能力很強
    # 安裝方式:pip install html5lib。
    # pip list 可以檢視安裝了哪些包
    soup = BeautifulSoup(text, "html5lib")
    divs = soup.find("div", class_="conMidtab")
    tables = divs.find_all("table")
    for table in tables:
        trs = table.find_all("tr")[2:]
        # enumerate()方法可以同時拿到index和value
        for index, tr in enumerate(trs):
            tds = tr.find_all("td")
            if index == 0:
                city = list(tds[1].stripped_strings)[0]
            else:
                city = list(tds[0].stripped_strings)[0]
            temperature = list(tds[-2].stripped_strings)[0]
            citys = {"city": city, "Lowest_temperature": int(temperature)}
            ALL_DATA.append(citys)
            # 使用json.dumps()方法解決print列印編碼問題
            # print json.dumps(citys, encoding="utf-8", ensure_ascii=False)
        # print "="*50


def main():
    # 1.獲取資料
    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",
        "http://www.weather.com.cn/textFC/gat.shtml"
    ]
    for url in urls:
        parse_page(url)

    # 2.資料分析
    # 2.1根據最低氣溫進行排序
    # 使用python中的匿名函式,lambda表示式
    ALL_DATA.sort(key=lambda list_data: list_data["Lowest_temperature"])
    # 使用json.dumps()方法解決print列印編碼問題
    # print json.dumps(ALL_DATA, encoding="utf-8", ensure_ascii=False)

    # 2.2視覺化過程:pyecharts.Bar
    data = ALL_DATA[0:10]
    # 匿名函式lambda表示式,map()函式返回的是map型別,需要轉換成list型別
    cities = list(map(lambda c: c["city"], data))
    temperatures = list(map(lambda c: c["Lowest_temperature"], data))
    chart = Bar("中國最低氣溫表")
    # 新增橫座標和縱座標
    chart.add("", cities, temperatures)
    # render渲染
    chart.render("china_temperature.html")
    print "Successful"



if __name__ == '__main__':
    main()
    # ALL_DATA = [
    #     {"city": "臺北", "Lowest_temperature": "25"},
    #     {"city": "高雄", "Lowest_temperature": "27"},
    #     {"city": "臺中", "Lowest_temperature": "25"}
    # ]
    # # 使用python中的匿名函式,lambda表示式
    # ALL_DATA.sort(key=lambda list_data: list_data["Lowest_temperature"])
    # # 使用json.dumps()方法解決print列印編碼問題
    # print json.dumps(ALL_DATA, encoding="utf-8", ensure_ascii=False)