專案需要全國省市縣資料,網上找了一圈發現要麼過時要麼收費,於是花點時間自己寫了個爬蟲爬了些基礎資料,基本上夠用了,資料是從國家統計局爬來的,目前更新到2023年,**如下:
s.mount('http://', httpadapter(max_retries=2)) # 重試次數
r = s.get(url, headers=headers, timeout=3)
r.raise_for_status()
return r.text
except exception as e:
print(e)
return ''
# 解析省級資料,返回(省份鏈結,id, 名字)
def parse_province(page):
provinces =
id_pattern = r'(.*).html' # 用於提取鏈結中的id資訊
soup = beautifulsoup(page, 'lxml')
province_trs = soup.find_all(class_='provincetr')
# 有些空標籤,所以需要很多判斷
for tr in province_trs:
if tr:
province_items = tr.find_all(name='td')
for item in province_items:
if item:
a = item.find(name='a')
if a:
next_url = a.get('href')
id_ = re.search(id_pattern, next_url).group(1)
id_ += '0' * (12 - len(id_)) # 省份id只給了前幾位,補全到12位
name = a.text
return provinces
# 解析市級資料,返回(市級鏈結,id, 名字)
def parse_city(page):
citys =
soup = beautifulsoup(page, 'lxml')
city_trs = soup.find_all(class_='citytr')
for tr in city_trs:
if tr:
tds = tr.find_all(name='td')
next_url = tds[0].find(name='a').get('href')
id_ = tds[0].text
name = tds[1].text
return citys
# 解析區縣資料,由於不需要下一級資料,並且保持格式統一,返回(none, id, 名字)
def parse_district(page):
districts =
soup = beautifulsoup(page, 'lxml')
district_trs = soup.find_all(class_='countytr')
for tr in district_trs:
if tr:
tds = tr.find_all(name='td')
id_ = tds[0].text
name = tds[1].text
return districts
# 寫入一串記錄到指定檔案
def write_lines(file, type, data_list, parent_id, level):
with open(file, type, encoding='utf-8') as f:
for data in data_list:
f.write(data[1] + '\t' + data[2] + '\t' + parent_id + '\t' + level + '\n')
if __name__ == "__main__":
root = ''
province_list =
city_list =
# 爬取省份資料
province_page = get_page(root)
if province_page:
province_list = parse_province(province_page)
if province_list:
write_lines('areas.txt', 'w', province_list, '0', '1')
print('='*20)
print('省份資料寫入完成')
print('='*20)
else:
print('省份列表為空')
else:
print('省份頁面獲取失敗')
# 爬取市級資料
if province_list:
for province in province_list:
province_url = root + province[0]
province_id = province[1]
province_name = province[2]
city_page = get_page(province_url)
if city_page:
city_list_tmp = parse_city(city_page)
if city_list_tmp:
city_list += city_list_tmp
write_lines('areas.txt', 'a', city_list_tmp, province_id, '2')
print(province_name+'市級資料寫入完成')
time.sleep(1)
else:
print(province_name+'市級列表為空')
else:
print(province_name+'市級頁面獲取失敗')
print('='*20)
print('市級資料寫入完成')
print('='*20)
# 爬取區縣資料
if city_list:
for city in city_list:
city_url = root + city[0]
city_id = city[1]
city_name = city[2]
district_page = get_page(city_url)
if district_page:
district_list = parse_district(district_page)
if district_list:
write_lines('areas.txt', 'a', district_list, city_id, '3')
print(city_name+'區縣資料寫入完成')
time.sleep(1)
else:
print(city_name+'區縣列表為空')
else:
print(city[2]+'區縣頁面獲取失敗')
print('='*20)
print('區縣資料寫入完成')
print('='*20)
最終資料格式為(id,名字,上級id,級別(1,2,3分別代表省市縣)):
共有3600多條資料
從本地資料庫查詢全國省市縣資訊
由於最近專案需要寫了一次簡單的從本地資料夾下獲取資料庫檔案,通過將資料庫檔案儲存到手機記憶體中查詢資料庫的方式來獲得全國省市縣資訊,廢話說完,直接 和工具類。1.將本地資料庫檔案開啟並讀取到手機記憶體中。將 assets 資料夾下的 資料檔案寫入 記憶體 方便獲取 資料夾下 有的話 就開啟 沒有的話...
Python獲取全國所有的省 市 縣 鎮 村
usr bin python3 coding utf 8 author he 通過國家統計局資料 獲取中國所有城市列表 獲取全國省份和直轄市 獲取省下級市 獲取市下級縣 縣下級鎮 鎮下級村 print 省 c citytr u url,he header,lists p print 市 o coun...
省市縣聯動列表資料整理
function if val.leveltype 2 if val.leveltype 3 for let i province.length 1 i 0 i children list.p province i let cityarr 市資料 for let c city.length 1 c ...