上節(jié)我們已經(jīng)爬取到想要的數(shù)據(jù),但是好學的你肯定不滿足于此,數(shù)據(jù)爬到了,那我們?nèi)绾螌⑵浔4嫦聛砟??接下來,我們將介紹如何把爬到的數(shù)據(jù)格式化輸出并保存。
1.格式化輸出
可以看到,我們采集出來的數(shù)據(jù)是以列表形式輸出的,接下來我們將代碼和名稱分開輸出。首先創(chuàng)建兩個新空列表,分別用于存放區(qū)劃代碼和名稱:
city_id = []
city_name = []
2.裝載數(shù)據(jù)
通過循環(huán)分別取出區(qū)劃代碼和名稱,并添加到對應(yīng)列表中:
m = len(citys) #獲取原列表長度
while m > 0:
city_name.append(citys[m-1].string)
city_id.append(citys[m-2].string)
# print(citys[m-1].string)
m = m - 2
3.結(jié)構(gòu)化數(shù)據(jù)并保存
將列表轉(zhuǎn)化成數(shù)據(jù)框,這里需要引入pandas模塊:
import pandas as pd
# 將列表轉(zhuǎn)化成數(shù)據(jù)框
city_info = pd.DataFrame({'id': city_id, 'name': city_name, 'url': city_urls})
print(city_info)
# 將數(shù)據(jù)保存到桌面
city_info.to_csv('C:/Users/SYH/Desktop/city_info.csv', index=False)
4.完整代碼
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 目標網(wǎng)頁
url_pro = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2019/41.html'
# 獲取響應(yīng)并解析
res = requests.get(url=url_pro).content
soup = BeautifulSoup(res, 'html.parser')
# 獲取數(shù)據(jù)
citys = soup.select('.citytr a')
# 創(chuàng)建列表以保存數(shù)據(jù)
city_id = []
city_name = []
# 裝載數(shù)據(jù)
m = len(citys)
while m > 0:
city_name.append(citys[m-1].string)
city_id.append(citys[m-2].string)
# print(citys[m-1].string)
m = m - 2
# 結(jié)構(gòu)化數(shù)據(jù)并保存
city_info = pd.DataFrame({'id': city_id, 'name': city_name, 'url': city_urls})
city_info.to_csv('C:/Users/SYH/Desktop/city_info.csv', index=False)
到此,數(shù)據(jù)的采集過程你已經(jīng)基本掌握,其間你會發(fā)現(xiàn),單獨爬蟲的代碼沒有幾行,你甚至可以死記硬背,但是你總不會只是把數(shù)據(jù)爬出來看看這么簡單,肯定是需要將爬出的數(shù)據(jù)再做更多的處理,例如結(jié)構(gòu)化輸出、保存、分析、可視化等等……這些,就得自己去補充了。
數(shù)據(jù)的處理,著重了解一下pandas及Python的一些語法基礎(chǔ)(如循環(huán)),要想爬取更多的數(shù)據(jù)或是元素,還需簡單了解一下HTML基礎(chǔ)……拋磚引玉,期待你更好的作品!
下節(jié),我們將介紹如何循環(huán)采集下一級(縣級)數(shù)據(jù)!