日韩性视频-久久久蜜桃-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年五级联动行政区划(精确)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 五月中文字幕 | 免费福利视频在线观看 | 国产噜噜噜噜久久久久久久久 | 寂寞d奶大胸少妇 | av影片在线 | 国产福利专区 | 91女人18毛片水多国产 | 欧美激情校园春色 | 偷拍中国夫妇高潮视频 | 欧美黄色xxx| 亚洲AV无码国产精品播放在线 | 久久精品噜噜噜成人88aⅴ | 国产一区二区精品丝袜 | 亚洲精品国产精品国自产 | 国产成人观看 | yw在线观看| 深夜视频免费在线观看 | 懂色av一区二区在线播放 | 毛片在线播放视频 | 欧美一二三区视频 | av导航网 | 嫩草视频在线播放 | 香蕉视频免费在线观看 | 亚洲av无码一区二区三区在线播放 | 久久精品这里只有精品 | 免费毛片一级 | 桃色网站在线观看 | 国产精品久久久久久影视 | 欧洲成人在线视频 | 日韩av线 | 人人爱人人艹 | 一级片日韩 | 丝袜熟女一区二区 | 国产精品一页 | 毛片网站入口 | 国产精品午夜福利 | 国产乱子视频 | 99久久婷婷国产综合精品草原 | 国产尤物av | 国产91在线播放九色 | 成人第一页 | 日韩三级电影网址 | 日韩精品乱码久久久久久 | 中文字幕色片 | 欧美老熟妇一区二区 | 人人射人人射 | 91污网站| 国产盗摄精品一区二区酒店 | 国产精品国产三级国产aⅴ原创 | 91福利网 | 精品国产a线一区二区三区东京热 | 欧美日韩一区二区在线 | 精品国产传媒 | 福利精品在线 | 欧美丰满一区二区免费视频 | 樱花影院电视剧免费 | 日韩精品视频免费 | 日韩大片av | 一二三不卡 | 三年在线观看视频 | 91久久精品国产91久久 | 亚洲第一天堂网 | a级片一区二区 | 8x8x国产精品一区二区 | 好吊色青青草 | 一区二区在线观看视频 | 在线视频 日韩 | 日韩精品观看 | 污片在线看| 欧美精品一区二区蜜臀亚洲 | 日韩精品久久久久久 | 伊人网成人 | 亚洲色偷偷综合亚洲av伊人 | 色欲久久久天天天综合网精品 | 日韩精品资源 | 欧美精品一二 | av一本二本 | 手机看片国产1024 | 日本va欧美va国产激情 | xxxx视频在线观看 | 理论视频在线观看 | 国产一区二区三区四区五区 | 久久久看 | 欧美 日韩 国产一区 | 16一17女人毛片 | 99热这里只有精品4 精品国产黄色 | 日本不卡一区二区在线观看 | 9l视频自拍九色9l视频 | 成人免费在线视频观看 | 一本久道久久综合无码中文 | 日韩淫视频 | 色欲av无码一区二区三区 | 丰满少妇被猛烈进入无码 | 久久亚洲国产精品 | 中文字幕免费播放 | 欧美黄一级 | 男生和女生差差的视频 | 奇米影视777第四色 2019中文字幕在线免费观看 | 妞妞影视|