GitHub源码分享微信搜索:码农StayUp主页地址:https://gozhuyinglong.github.io源码分享:https://github.com/gozhuyinglong/博客演示1。前言国家行政区划一般用于网站建设,方便区域数据分析。接下来我们使用Python爬取行政区域数据,数据来源是比较权威的国家统计局。抓取的页面是2020年统计的分区代码和城乡分区代码。这里有个问题,为什么统计局只提供网页版?大众提供一个文件版本岂不是更方便。欢迎了解更多的朋友给我留言。2.网站分析在抓取数据之前要做的就是网站分析,通过分析来确定采用何种方式进行抓取。2.1省份页面为静态页面,其二级页面使用相对地址,通过class=provincetr的tr元素定位2.2城市页面为静态页面,其二级页面使用相对地址,通过trclass=citytr的元素定位2.3区县页面的静态页面,其二级页面使用相对地址,使用class=countytr的tr元素定位2.4镇页面的静态页面,其二级页面使用相对地址,通过class=towntrtr元素定位2.5村庄页面为静态页面,没有二级页面,使用class=villagetr的tr元素定位3.安装需要的库通过上面的分析,使用方法就可以了抓取静态网页。以下是需要提前安装的一些必备库:Requests、BeautifulSoup、lxml。3.1RequestsRequests是一个用于访问URL网络资源的PythonHTTP客户端库。安装Requests库:pipinstallrequests3.2BeautifulSoupBeautifulSoup是一个Python库,可以从HTML或XML文件中提取数据。通过指定的转换器可以实现页面文档的导航、搜索、修改等。安装BeautifulSoup库:pipinstallbeautifulsoup43.3lxmllxml是一个用Python编写的库,用于快速灵活地处理XML和HTML。它支持XML路径语言(XPath)和可扩展样式表语言转换(XSLT),并实现通用的ElementTreeAPI。安装lxml库:pipinstalllxml4。代码实现爬虫的步骤如下:使用Requests库获取网页。使用BeautifulSoup和lxml库来解析网页。使用Python的File来存储数据。输出文件为:当前py文件所在目录,文件名为:area-number-2020.txt。输出结果为:级别、部门代码、名称,以制表符分隔,方便保存到Excel和数据库。详细代码见下面:#-*-coding:utf-8-*-importrequestsfrombs4importBeautifulSoup#根据地址获取页面内容,返回BeautifulSoupdefget_html(url):#如果页面打开失败,无限重试,不回头可以说whileTrue:try:#超时时间为1秒response=requests.get(url,timeout=1)response.encoding="GBK"ifresponse.status_code==200:returnBeautifulSoup(response.text,"lxml")else:continueexceptException:continue#Getaddressprefix(forrelativeaddress)defget_prefix(url):returnurl[0:url.rindex("/")+1]#递归抓取下一页defspider_next(url,lev):iflev==2:spider_class="city"eliflev==3:spider_class="county"eliflev==4:spider_class="town"else:spider_class="village"对于get_html(url).select("tr."+spider_class+"tr")中的项目:item_td=item.select("td")item_td_code=item_td[0].select_one("a")item_td_name=item_td[1].select_one("一个")如果item_td_code为None:item_href=Noneitem_code=item_td[0].textitem_name=item_td[1].text如果lev==5:item_name=item_td[2].text否则:item_href=item_td_code.get("href")item_code=item_td_code.textitem_name=item_td_name.text#输出:level,divisioncode,namecontent2=str(lev)+"\t"+item_code+"\t"+item_nameprint(content2)f.write(content2+"\n")ifitem_hrefisnotNone:spider_next(get_prefix(url)+item_href,lev+1)#entryif__name__=='__main__':#抓取省份页面province_url="http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2020/index.html"province_list=get_html(province_url).select('tr.provincetra')#数据写入当前文件夹下的area-number-2020.txtf=open("area-number-2020.txt","w",encoding="utf-8")尝试:forprovinceinprovince_list:href=province.get("href")province_code=href[0:2]+"0000000000"province_name=province.text#输出:级别,分区代码,姓名content="1\t"+province_code+"\t"+province_nameprint(content)f.write(content+"\n")spider_next(get_prefix(province_url)+href,2)finally:f.close()5.资源下载如果你只是需要行政区数据,那么已经为你准备好了,来自下载链接如下:https://pan.baidu.com/s/18MDd...提取码:t2eg6爬虫遵循的规则引用自:https://www.cnblogs.com/kongyijilafumi/p/13969361.html遵守Robots协议,谨慎爬行,限制自己的爬虫行为,禁止接近DDOS的请求频率。反爬或正常情况下无法到达,否则为Hacker行为爬取他人隐私,立即删除ly以降低进入游戏的可能性。此外,你必须控制你的欲望
