前言
目标:获取成都近十年的人口以及房价数据并分析其相关性和趋势。
目标网站:国家统计局
使用工具:selenium+numpy
IDE:spyder
代码部分
from selenium import webdriver
import matplotlib.pyplot as plt#导入绘图库pyplot
import matplotlib as mat
from numpy import array,cov,corrcoef
import numpy as np
global priceurllis
global purllis
global price1
global price2
global url1
global url2
yearslis=[2008,2009,2010,2011,2012,2013,2014,2015,2016,2017]
priceurllis=[]
purllis=[]
priced1=[]
priced2=[]
#爬取数据部分
def geteaceprice(url1): #定义获取房价数据的函数
browser = webdriver.Chrome()
browser.get(url1)
price1 = browser.find_elements_by_css_selector("td[align^='right']")
for q1 in range(len(price1)):
if q1 ==1:#只获得第一个数据
txt1 = price1[q1].text
priced1.append(txt1)
browser.close()
def geteachperson(url2):#定义获得人口数据的函数
browser = webdriver.Chrome()
browser.get(url2)
price2 = browser.find_elements_by_css_selector("td[align^='right']")
for q2 in range(len(price2)):
if q2 ==1:#只获得第一个数据
txt2 = price2[q2].text
priced2.append(txt2)
browser.close()
def main():#定义主函数
for i in range(10):#产生循环,产生链接,并获得每年的人口与房价数据
url1 = ('http://data.stats.gov.cn/search.htm?s='+str(yearslis[i])+'%20成都%20住宅商品房平均销售价格(元/平方米)')
priceurllis.append(url1)
url2 = ('http://data.stats.gov.cn/search.htm?s='+str(yearslis[i])+'%20成都%20居住人口')
purllis.append(url2)
print(url1,url2)
geteaceprice(url1)
geteachperson(url2)
main()
#数据分析部分,为了简便,直接将获取的数据写出。
y=[4857.00, 4925.00, 5937.00, 6716.71, 7288.24, 7197.00, 7032.00, 6875.00, 7504.00, 8733.00]
y2=[1124.96, 1139.63, 1149.07, 1163.28, 1173.30, 1187.99, 1210.74, 1228.05, 1398.90,1435.33]
plt.plot(yearslis,y2,'b',yearslis,y,'g')
data = array(y)
data2 = array(y2)
x = np.vstack((data,data2))
np.corrcoef(data, data2)
np.corrcoef(x)
总结
由于自己的熟练度限制,代码很多地方很繁琐需要改进,但是总体思路是清晰的,如果有好的建议或者问题请提出来。
另:在爬取数据的时候遇到的许多问题,但是解决后的乐趣是真的爽的一笔,可能这就是编程的乐趣吧