python匿名函式的使用
阿新 • • 發佈:2019-01-01
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)