前言
最近打算使用 flutter 做一个省市的级联列表,但是目前没有数据来源,就想着搜搜有没有 json 的数据,结果搜了一下只有各种数据库的
然后搜了下有个网站说有很完整的数据的还是收费的
作为一个穷人程序员,如果是公司用,我付费买一个也无所谓,但是本身是想私人使用,甚至开源出去,付费就没必要了
这时候我想着,既然如此,我就爬一份数据,自己造一个吧
说到爬虫,我们就想起了明年…两开花 python
开发环境
使用的语言是 python3
request_html+基本库
爬取网页
国家统计局-2017 年统计用区划代码和城乡划分代码(截止 2017 年 10 月 31 日)
查看网页
一级页面
使用 chrome dev 工具查看元素
呃. table 体系,最近几年算是比较少见了
分析了一下,整个页面只有备案号和省份名称是 a 标签,这下过滤一下备案号,剩下的不就是我们要的数据了吗
二级页面
点开北京,数据比较少,只有市辖区
内蒙的就比较多一点了
纯数字的是编码,其他的是名称,也是过滤掉 IPC 备案的就好
三级页面
和二级页面基本一致
撸码
city_get.py
import json
from requests_html import HTMLSession
import requests_html
session = HTMLSession()
class Entity:
name: str
link: str
no: str
baseUrl = "http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2017/"
def __str__(self) -> str:
return "name:%s,link=%s" % (self.name, self.link)
def __eq__(self, o: object) -> bool:
return self.link == o.link
def to_json(self) -> str:
pass
class Province(Entity):
def __init__(self) -> None:
super().__init__()
self.cityList = []
def __str__(self) -> str:
return "name:%s,link=%s" % (self.name, self.link)
def fetch_city_list(self):