爬取人口數據


一、主題式網絡爬蟲設計方案(15分)
1.主題式網絡爬蟲名稱:爬取人口數據及數據可視化
2.主題式網絡爬蟲爬取的內容與數據特征分析:爬取國家統計局人口數據
3.主題式網絡爬蟲設計方案概述(包括實現思路與技術難點):首先找到爬取頁面的源代碼,找到所需要爬取的數據在源代碼中的位置,接下來進行數據爬取,並將數據持久化,接下來對數據進行清洗處理,並進行數據分析和可視化

首先是頁面如下

 

 按f12

 

 找到人口數據

 

 



1.數據爬取與采集(20)

import requests
import time
import json
import matplotlib.pyplot as plt
import pandas as pd
#用來獲得 時間戳
def gettime():
return int(round(time.time()*1000))

if __name__=='__main__':
"一,請求數據"
#用來定義頭部
headers={}
#用來傳遞參數
keyvalue={}
#目標網址
url='http://data.stats.gov.cn/easyquery.htm'

#頭部填充
headers['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64) '\
'AppleWebKit/537.36 (KHTML, like Gecko)'\
'Chrome/70.0.3538.102 Safari/537.36'

#參數填充
keyvalue['m'] = 'QueryData'
keyvalue['dbcode'] = 'hgnd'
keyvalue['rowcode'] = 'zb'
keyvalue['colcode'] = 'sj'
keyvalue['wds'] = '[]'
keyvalue['dfwds'] = '[{"wdcode":"zb","valuecode":"A0301"}]'
keyvalue['k1'] = str(gettime())

# 發出請求,使用get方法,這里使用我們自定義的頭部和參數
r = requests.get(url, headers=headers, params=keyvalue)

"二,解析數據"
year=[]
population=[]
data=json.loads(r.text)
data_one = data['returndata']['datanodes']
for value in data_one:
if('A030101_sj' in value['code']):
year.append(value['code'][-4:])
population.append(int(value['data']['strdata']))

print(year)
print(population)

 

 


2.對數據進行清洗和處理(10)


#檢查重復
print(df.duplicated())

 

 

 


4.數據分析與可視化(例如:數據柱形圖、直方圖、散點圖、盒圖、分布圖)(15分)

plt.figure()
plt.plot()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.bar(year,population)
plt.xlabel('年份')
plt.ylabel('萬人')
plt.title('年末總人口')
plt.show()

 

 

5.根據數據之間的關系,分析兩個變量之間的相關系數,畫出散點圖,並建立變量之間的回歸方程(一元或多元)(10分)。

6.數據持久化(5分)

將爬取的數據保存在111.csv中

df = pd.DataFrame({'year' : year, 'population' : population})
df.to_csv("C:/Users/lenovo/111.csv", index=False, sep=',')

 

 


7.將以上各部分的代碼匯總,附上完整程序代碼

import requests
import time
import json
import matplotlib.pyplot as plt
import pandas as pd
#用來獲得 時間戳
def gettime():
return int(round(time.time()*1000))

if __name__=='__main__':
"一,請求數據"
#用來定義頭部
headers={}
#用來傳遞參數
keyvalue={}
#目標網址
url='http://data.stats.gov.cn/easyquery.htm'

#頭部填充
headers['User-Agent']='Mozilla/5.0 (Windows NT 10.0; Win64; x64) '\
'AppleWebKit/537.36 (KHTML, like Gecko)'\
'Chrome/70.0.3538.102 Safari/537.36'

#參數填充
keyvalue['m'] = 'QueryData'
keyvalue['dbcode'] = 'hgnd'
keyvalue['rowcode'] = 'zb'
keyvalue['colcode'] = 'sj'
keyvalue['wds'] = '[]'
keyvalue['dfwds'] = '[{"wdcode":"zb","valuecode":"A0301"}]'
keyvalue['k1'] = str(gettime())

# 發出請求,使用get方法,這里使用我們自定義的頭部和參數
r = requests.get(url, headers=headers, params=keyvalue)

"二,解析數據"
year=[]
population=[]
data=json.loads(r.text)
data_one = data['returndata']['datanodes']
for value in data_one:
if('A030101_sj' in value['code']):
year.append(value['code'][-4:])
population.append(int(value['data']['strdata']))

print(year)
print(population)


#檢查重復
print(df.duplicated())


df = pd.DataFrame({'year' : year, 'population' : population})
df.to_csv("C:/Users/lenovo/111.csv", index=False, sep=',')

"三,繪制數據"
plt.figure()
plt.plot()
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.bar(year,population)
plt.xlabel('年份')
plt.ylabel('萬人')
plt.title('年末總人口')
plt.show()

四、結論(10分)
1.經過對主題數據的分析與可視化,可以得到哪些結論?

經過對主題數據的分析與可視化,可以得到中國人口數據增長情況

逐年在上漲
2.對本次程序設計任務完成的情況做一個簡單的小結。

經過這次的學習與作業實踐,學到了很多爬蟲的知識,不過還是遠遠不夠的。

自己還有很多不懂的地方,還需要繼續學習

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM