日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息

發(fā)布時間:2025/3/12 python 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

全國行政區(qū)劃信息查詢平臺地址:http://xzqh.mca.gov.cn/map

檢查網(wǎng)頁源碼:

檢查網(wǎng)頁源碼可以發(fā)現(xiàn): 所有省級信息全部在javaScript下的json中,會在頁面加載時加載json數(shù)據(jù),填充到頁面的option中。
1.第一步:使用正則表達(dá)式抓取json數(shù)據(jù)并解析,租成一個province集合:

# 獲取省的集合def get_province(self):pattern = re.compile(r"var json =(.*?);", re.MULTILINE | re.DOTALL)script = self.soup.find("script", text=pattern)lists = str(pattern.search(script.text).group(1))json_list = json.loads(lists)# province_list = set()province_dict = dict()for json_data in json_list:province = json_data['shengji']quhua_code = json_data['quHuaDaiMa']province_dict.update({quhua_code: province})# province_list.add(province)# print(province_dict)return province_dict

2.第二步:檢查該網(wǎng)站實(shí)現(xiàn)級聯(lián)查詢的方式,找出查詢市區(qū)的方式




根據(jù)這段源碼可看出,在選擇 省級的后,網(wǎng)頁會調(diào)用selectJson接口進(jìn)行一個post請求,上圖可以看到請求的body和header等信息。
于是事情就變得簡單起來:代碼可以這樣寫(如下)

# 獲取市def get_city(self, shengji):body = ("shengji=" + shengji).encode('UTF-8')# body = "shengji='江蘇省(蘇)'"..encode('UTF-8')headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, ""like Gecko) Chrome/77.0.3865.120 Safari/537.36"}response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)content = response.contentjson_list = json.loads(content)# city_list = set()city_dict = dict()for json_data in json_list:citys = json_data['diji']# city_list.add(citys)quhua_code = json_data['quHuaDaiMa']city_dict.update({quhua_code: citys})return city_dict# return city_list# 獲取區(qū)def get_area(self, shengji, diji):body = ("shengji=" + shengji + "&diji=" + diji).encode('UTF-8')headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, ""like Gecko) Chrome/77.0.3865.120 Safari/537.36"}response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)content = response.contentjson_list = json.loads(content)# area_list = set()area_dict = dict()for json_data in json_list:area = json_data['xianji']# area_list.add(area)area_code = json_data['quHuaDaiMa']area_dict.update({area_code: area})return area_dict

2.第三步:main函數(shù)(遍歷所有省市區(qū)+數(shù)據(jù)入庫)
數(shù)據(jù)庫表結(jié)構(gòu)如下:

【全部代碼如下】:

import requests from bs4 import BeautifulSoup import pymysql import re import jsonclass allAreaDataNew(object):base_url = 'http://xzqh.mca.gov.cn/map'headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'}wb_data = requests.get(base_url, headers=headers)wb_data.encoding = 'GBK'soup = BeautifulSoup(wb_data.text, 'lxml')# print(soup)def __init__(self):self.db = pymysql.connect("***", "***", "***", "***", charset="utf8mb4") # mysql數(shù)據(jù)庫self.main()self.db.close()# 入口def main(self):sql_list = set()province_dict = self.get_province()for province_code in province_dict:province = province_dict[province_code]city_dict = self.get_city(province)sql_province = "insert into area_config values (null,'" + province + "','PROVINCE'," + province_code + ",0)"sql_list.add(sql_province)print(province_code + "----------------------------------省------------------------------------------" + province + "\n")for city_code in city_dict:city = city_dict[city_code]area_dict = self.get_area(province, city)print(city_code + "*******************市****************" + city + "\n")# 處理 省直轄縣級行政單位if city == '省直轄縣級行政單位' or city == '自治區(qū)直轄縣級行政單位':sql_city = "insert into area_config values (null,'" + city + "','CITY'," + province_code + "," + province_code + ")"sql_list.add(sql_city)for area_code in area_dict:area = area_dict[area_code]print(area_code + "-區(qū)-" + area + "\n")sql_area = "insert into area_config values (null,'" + area + "','DISTRICT'," + area_code + "," + province_code + ")"sql_list.add(sql_area)else:sql_city = "insert into area_config values (null,'" + city + "','CITY'," + city_code + "," + province_code + ")"sql_list.add(sql_city)for area_code in area_dict:area = area_dict[area_code]print(area_code + "-區(qū)-" + area + "\n")sql_area = "insert into area_config values (null,'" + area + "','DISTRICT'," + area_code + "," + city_code + ")"sql_list.add(sql_area)print(str(sql_list))# 事務(wù)入庫empty_sql = "delete from area_config"self.connect_mysql(empty_sql, sql_list)# 獲取省def get_province(self):pattern = re.compile(r"var json =(.*?);", re.MULTILINE | re.DOTALL)script = self.soup.find("script", text=pattern)lists = str(pattern.search(script.text).group(1))json_list = json.loads(lists)# province_list = set()province_dict = dict()for json_data in json_list:province = json_data['shengji']quhua_code = json_data['quHuaDaiMa']province_dict.update({quhua_code: province})# province_list.add(province)# print(province_dict)return province_dict# 獲取市def get_city(self, shengji):body = ("shengji=" + shengji).encode('UTF-8')# body = "shengji='江蘇省(蘇)'"..encode('UTF-8')headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, ""like Gecko) Chrome/77.0.3865.120 Safari/537.36"}response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)content = response.contentjson_list = json.loads(content)# city_list = set()city_dict = dict()for json_data in json_list:citys = json_data['diji']# city_list.add(citys)quhua_code = json_data['quHuaDaiMa']city_dict.update({quhua_code: citys})return city_dict# return city_list# 獲取區(qū)def get_area(self, shengji, diji):body = ("shengji=" + shengji + "&diji=" + diji).encode('UTF-8')headers = {'Content-Type': "application/x-www-form-urlencoded; charset=utf-8",'User-Agent': "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, ""like Gecko) Chrome/77.0.3865.120 Safari/537.36"}response = requests.post('http://xzqh.mca.gov.cn/selectJson', data=body, headers=headers)content = response.contentjson_list = json.loads(content)# area_list = set()area_dict = dict()for json_data in json_list:area = json_data['xianji']# area_list.add(area)area_code = json_data['quHuaDaiMa']area_dict.update({area_code: area})return area_dict# return area_listdef connect_mysql(self, empty_sql, sql_list):cursor = self.db.cursor()try:cursor.execute(empty_sql)for sql in sql_list:cursor.execute(sql)print('=================================更新所有數(shù)據(jù)完成!=================================')except Exception as e:print('=================================更新失敗!=================================')print(e)self.db.rollback()finally:cursor.close()# 提交操作self.db.commit()if __name__ == '__main__':allAreaDataNew()

代碼執(zhí)行成功后就可以查到中國所有省市區(qū)啦!:

特殊情況:“省直轄縣級行政單位”和“自治區(qū)直轄縣級行政單位”

部分省有特殊的“直轄縣級行政單位”或“自治區(qū)直轄縣級行政單位”
參考:https://baike.baidu.com/item/省直轄縣級行政單位/6903180?fr=aladdin
遇到這種情況有點(diǎn)懵逼,因?yàn)闆]有 區(qū)號代碼 所以無法關(guān)聯(lián)父子關(guān)系。
但是無妨,數(shù)據(jù)庫設(shè)計有type字段~直接將省級區(qū)號代碼作為唯一值給到市,作為區(qū)號代碼,再將這個值賦值給區(qū),作為區(qū)的父級區(qū)號代碼,這樣后臺用type+區(qū)號代碼判斷關(guān)聯(lián)關(guān)系。

PS:后續(xù)
1.由于本身是java項(xiàng)目要用到中國的省市區(qū) 2.并且中國的省市區(qū)的變化很頻繁(市級區(qū)級的變化時有發(fā)生),因此后期可以用jython將其用到j(luò)ava項(xiàng)目,并且可以寫一個job定時任務(wù),定時更新數(shù)據(jù)庫表。

參考文檔

https://jingyan.baidu.com/article/d169e1867bd27f436611d829.html

總結(jié)

以上是生活随笔為你收集整理的python+ BeautifulSoup抓取“全国行政区划信息查询平台”的省市区信息的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲无av在线中文字幕 | 亚洲性大片 | wwwxx欧美| 成人免费观看av | 免费欧美大片 | 欧美人妻少妇一区二区三区 | 免费观看黄色的网站 | 国产视频精品免费 | 亚洲成人激情在线 | 久久成人乱码欧美精品一区二区 | 五月婷婷综 | 日韩中文字幕网址 | 老司机精品视频在线 | 国产伦精品一区二区三区妓女 | av女优一区 | 麻豆久久久久久久 | 成人在线激情视频 | 日韩va亚洲va欧美va久久 | 射久久久 | 欧美jizz欧美性大全 | 国产成人精品在线播放 | 自拍偷拍一区二区三区 | 成人mv在线观看 | 女久久| 91av精品| 午夜国产一级 | 韩国无码av片在线观看网站 | 久久黄色 | avtt在线观看 | 国产精品视频在 | 黄色三级国产 | 三级黄色生活片 | 黄视频在线免费看 | 成人午夜视频在线 | 国产精品久久国产 | 亚洲国产永久 | 亚洲欧美中文字幕5发布 | 波多野在线观看 | 白白色免费视频 | 四虎影视免费在线观看 | 午夜激情综合 | 午夜理伦三级理论 | 欧美专区在线 | 日日狠狠 | 欧洲免费毛片 | 成人一级在线 | 国产丰满农村老妇女乱 | 亚州av一区二区 | av日韩av | 色94色欧美sute亚洲线路二 | 在线免费黄色av | wwwxxx日本 | 在线观看一区二区三区四区 | 国产黄色片免费观看 | 欧美日韩中文字幕一区 | 亚洲色图国产精品 | 亚洲123区 | 欧美美女爱爱视频 | 日韩八区 | 91超碰免费在线 | 男女免费看 | 国产精品精东影业 | 四虎永久在线精品免费网址 | 先锋影音在线 | 国产精品二 | 三级在线观看网站 | 午夜久久久久久久久久久 | 亚洲成人网在线 | 91浏览器在线观看 | www黄色大片 | 芭乐视频色 | 日韩乱码人妻无码中文字幕久久 | 亚洲欧美综合色 | 久久久久久无码精品人妻一区二区 | 韩国av一区二区三区 | 日韩人妻无码精品综合区 | 青草久久久 | 九九九免费 | 草免费视频 | av免费在线观| 国模无码大尺度一区二区三区 | 日本女优网址 | 欧美一卡二卡 | 先锋成人 | 老司机深夜免费福利 | 日日操操 | 久久无码高潮喷水 | 免费不卡毛片 | 欧美日韩在线一区 | 天天操狠狠操夜夜操 | 欧美性受xxxx黑人xyx性 | 东北少妇不戴套对白第一次 | 免费黄色美女网站 | 婷婷综合另类小说色区 | 深夜福利麻豆 | youjizz麻豆| 强行侵犯视频在线观看 | 一级黄色美女 | 一起操在线观看 |