繪制圖形所需的數據源通常是不固定的,比如,有時我們會需要從網頁抓取,
也可能需從文件或數據庫中獲取。
利用抓取網頁數據技術,把我國 1990 年到 2016 年的 GDP 數據抓取出來 ,再利用 MatplotUb 進行繪圖顯示 。 經搜索發現, http://value500.com/M2GDP.html 網頁中有我們所需數據 。
將鼠標移到表格每一行的“年份”處井右擊,在彈出的快捷菜單中選擇“檢查”
選項。
Chrome 會打開網頁開發工具,並自動顯示鼠標位置的 html 程序代碼,我們可根 據 html 代碼來抓取表格數據 : 年份數據位於 table 中 第 1 個 td 標簽中, gdp 數據們於 表格的中第 3 個 td 標簽中。
爬取並繪制我國 GDP1990~2016 數據圖
import requests #導入網頁內容抓取包 import matplotlib.pyplot as plt #導入繪圖模塊,重命名為plt from bs4 import BeautifulSoup as bs #導入網頁解析模塊,重命名為bs from pylab import rcParams #導入pylab包 rcParams['font.sans-serif'] = ['SimHei'] #讓matplotlib支持簡體中文
year = [] #橫坐標列表 gdp = [] #縱坐標列表 url = "http://value500.com/M2GDP.html" #設置要在哪個網頁抓數據 content = requests.get(url) #獲取網頁內容 content.encoding='utf-8' #轉為utf-8編碼 content1=content.text #取得網頁內容的text部分
parse = bs(content1,"html.parser") #進行html解析 data1 = parse.find_all("table") #獲取所有表元素 rows = data1[19].find_all("tr") #取出包含所需數據的表(網頁第20個表) i=0 #為了不讀取表頭數據,設置此控制變量 for row in rows: cols = row.find_all("td") #把每一行表數據存入cols變量 if(len(cols) > 0 and i==0): #如果是第一行,則控制變量加1 i+=1 else: #如果不是第一行,則寫入繪圖列表 year.append(cols[0].text[:-2]) #取得年份數據(數據的最后兩個字符不是數據需去除)並寫入圖形的year軸 gdp.append(cols[2].text) #把gdp值存入gdp軸 plt.plot(year, gdp, linewidth=2.0) #繪制圖形,線寬為2 plt.title("1990~2017年度我國GDP") #設置圖形標題 plt.xlabel("年度") #設置x軸標題 plt.ylabel("GDP(億元)") #設置y軸標題 plt.show() #顯示所繪圖形 print(year) print(gdp)