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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

爬取国家统计局2020年五级联动行政区划(精确)

發布時間:2024/1/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 爬取国家统计局2020年五级联动行政区划(精确) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無其他新鮮數據的情況下,這篇應該是國家統計局專欄的最后一篇
思路和之前爬國家統計局運用的根節點葉節點思路基本相同,先放代碼,具體的說明想好再解釋~(代碼中有部分注釋)
爬到最小的村級大概用時一個半小時(因為沒用代理ip或者多進程,最后要訪問40000+鄉級網頁比較耗時),總共630000+村級數據,但是網上的數據量分布在640000-740000之間,先不說和我數據不符,竟然體量也不盡相同,我也不知道是怎么回事qaq
(最新:看到這位博主的博客https://blog.csdn.net/xuemu2008/article/details/110262257,他的數據條目和這篇代碼實現能完成的數目完全一致,所以應該是完全正確的)

import requests import re import xlsxwriter import time time_start=time.time() agent={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'} choose_ls=[depth*2 if depth<=3 else 3*(depth-1) for depth in range(1,6)]#根據深度大小取12位代碼前**位 match_level=['provincetr','citytr','countytr','towntr','villagetr'] initurl='http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html' total_dict={} depth=0 each_root={initurl:('','')} max_depth=5#可選,1-5分別表示省級、地級、縣級、鄉級、村級,進而爬取固定深度范圍內所有的葉節點以及該深度下的根節點 while depth<max_depth:total_count=0next_root={}for url in each_root:code_join=each_root[url][0]+'-' if depth!=0 else each_root[url][0]zone_join=each_root[url][1]+'-' if depth!=0 else each_root[url][1]change_root='/'.join(url.split('/')[:-1])+'/'while True:try:req=requests.get(url,headers=agent)req.encoding='GBK'#中文解碼,不要用req.encoding=req.apparent_encoding,這樣識別出來的req.encoding='gb2312',有好多復雜漢字解不出碼text=req.texttext=text.replace('\n','\\n')#正則表達式會跳過換行符(無法識別下一行),因此將換行符替換special_sigh=Falseif match_level[depth] in text:match_text=re.findall(r"class='%s'>(.*?)</table"%match_level[depth],text)[0]breakelse:search=Falsefor level in range(depth,5):#東莞、中山、儋州缺縣級單位,因此需要進行識別并放入下一節點存儲if match_level[level] in text:match_text=re.findall(r"class='%s'>(.*?)</table"%match_level[level],text)[0]search=Truespecial_sigh=Trueprint('特殊區劃:%s'%each_root[url][1])breakif search:breakelse:print('服務器繁忙')time.sleep(2)except:print('服務器繁忙')time.sleep(2)if special_sigh:next_root[url]=(code_join,zone_join)else:if depth!=0:has_tree=re.findall(r"href='(.*?)'>(\d+?)<.*?html'>(.*?)</a></td></tr>",match_text)else:base_tree=re.findall(r"href='(.*?)'>(.*?)<br/",match_text)has_tree=[(each[0],each[0].split('.html')[0],each[1]) for each in base_tree]base_no=re.findall(r"td>(\d+?)</td><td>(.*?)</td></tr>",match_text)no_tree=[(each[0],re.findall(r'<td>(.+)',each[1])[0] if 'td' in each[1] else each[1]) for each in base_no]for each in has_tree:each_dir=change_root+each[0]next_root[each_dir]=(code_join+each[1][:choose_ls[depth]],zone_join+each[2])if depth==3:if (total_count+1)%100==0:print('已爬取%d個,在路徑%s處'%(total_count+1,zone_join+each[2]))else:print('在路徑%s處'%(zone_join+each[2]))if no_tree:for each in no_tree:total_dict[code_join+each[0][:choose_ls[depth]]]=zone_join+each[1]if depth==4:if (total_count+1)%800==0:print('已爬取%d個,在路徑%s處'%(total_count+1,zone_join+each[1]))else:print('已獲取路徑%s'%(zone_join+each[1]))total_count+=1depth+=1each_root=next_root def decompose(each):if type(total_dict[each])==tuple:codelist=total_dict[each][0].split('-')namelist=total_dict[each][1].split('-')else:codelist=each.split('-')namelist=total_dict[each].split('-')if len(codelist)<depth:for i in range(len(codelist),depth):codelist.append('')namelist.append('')ziplist=list(zip(codelist,namelist))return [i for j in ziplist for i in j] sort_name=['省級','地級','縣級','鄉級','村級'] real_column=[(sort_name[each]+'代碼',sort_name[each]+'名稱') for each in range(depth)] flat_col=[i for each in real_column for i in each] total_dict.update(each_root) if depth<=3:#縣級及以上數據量不大(約三千行),可以用excel存儲wk=xlsxwriter.Workbook('五級聯動.xlsx')sh=wk.add_worksheet('sheet1')for each in range(2*depth):sh.write(0,each,flat_col[each])totalrow=1for each in total_dict:flatlist=decompose(each)for i in range(2*depth):sh.write(totalrow,i,flatlist[i])totalrow+=1wk.close() else:#縣級往下數據較多,excel沒有優勢,因此寫入csv存儲book=open('五級聯動.csv','w',encoding='utf-8')book.write(','.join(flat_col)+'\n')for each in total_dict:flatten=decompose(each)book.write(','.join(flatten)+'\n')book.close() time_end=time.time() rest_second=time_end-time_start print('用時%d分%d秒'%divmod(rest_second,60))

村級經pandas sort_values排序后,如圖所示:

總結

以上是生活随笔為你收集整理的爬取国家统计局2020年五级联动行政区划(精确)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国内精品国产成人国产三级 | 成人h在线观看 | 成人人人人人欧美片做爰 | 久久无码性爱视频 | 亚洲欧洲精品一区二区 | 国产极品尤物 | 黄色国产一区二区 | 依依成人综合网 | 91超碰在线免费观看 | 亚洲色图小说 | 久久久久久久久久久久久久国产 | 欧美性生活在线视频 | 97精品人妻一区二区三区 | 七月婷婷综合 | 免费成年人视频在线观看 | 波多野吉衣在线视频 | 精品久久人人妻人人做人人 | 亚洲高清在线免费观看 | 国产精品一区二区视频 | 日本二区在线观看 | 韩国理论午夜 | 日本视频免费 | 韩国三级hd两男一女 | 激情自拍视频 | 成人毛片在线 | 黑人3p波多野结衣在线观看 | 真实的中国女人做爰 | 午夜精品久久久久久久99 | 三级色网 | 午夜亚洲天堂 | 天天久久久 | 在线色| 久操视频在线免费观看 | av在线资源| 亚洲爽爆av | 亚洲大尺度网站 | 樱花电影最新免费观看国语版 | 毛片大片| 亚洲性免费 | 久久久久久九九九 | 99国产精 | 五月天综合久久 | 四虎免费影视 | 金鱼妻日剧免费观看完整版全集 | 欧美视频一区在线观看 | 国产大奶在线 | 人人爽人人爽人人片 | 久久久久久久久久久97 | 一区二区 亚洲 | 国产第一毛片 | 国产福利在线观看视频 | 风间由美一二三区av片 | 99精品视频免费在线观看 | 91免费视频免费版 | 日本泡妞视频 | 国产精品2区 | 日本伦理片在线看 | 国产精品69久久久久 | 欧美黄色激情 | 色呦呦呦呦 | 俄罗斯av在线 | 小妹色播 | 国产综合精品一区二区三区 | 91视频你懂的 | 亚洲一区第一页 | 国产不卡视频在线 | 日韩一级淫片 | 337p日本欧洲亚洲大胆精筑 | 亚洲欧美另类图片 | 国产凹凸一区二二区 | 真实的国产乱xxxx在线 | 男女做那个的全过程 | 天天国产视频 | 99久久精品国产一区色 | 69av网站 | 免费亚洲婷婷 | 少妇久久久久久久 | 91日本在线| 亚洲视频一区二区三区在线观看 | 成人啪啪 | 色狠狠av | 99热99热| 中文有码在线 | 日本jizzjizz | 国产欧美日韩专区发布 | 亚洲无av在线中文字幕 | 日批视频免费看 | 娇妻第一次尝试交换的后果 | 91天天射| 2024av| 三上悠亚三级 | 综合色在线| 成人尹人 | 成人69视频| 午夜在线视频 | 久久一级免费视频 | 碧蓝之海动漫在线观看免费高清 | 亚洲天堂2024 | 色黄大色黄女片免费中国 |