使用python爬取一个省市城市列表

前言

最近打算使用 flutter 做一个省市的级联列表,但是目前没有数据来源,就想着搜搜有没有 json 的数据,结果搜了一下只有各种数据库的

然后搜了下有个网站说有很完整的数据的还是收费的

作为一个穷人程序员,如果是公司用,我付费买一个也无所谓,但是本身是想私人使用,甚至开源出去,付费就没必要了

这时候我想着,既然如此,我就爬一份数据,自己造一个吧

说到爬虫,我们就想起了明年…两开花 python

开发环境

使用的语言是 python3

request_html+基本库

爬取网页

国家统计局-2017 年统计用区划代码和城乡划分代码(截止 2017 年 10 月 31 日)

查看网页

一级页面

使用 chrome dev 工具查看元素

20190125135659.png

呃. table 体系,最近几年算是比较少见了

分析了一下,整个页面只有备案号和省份名称是 a 标签,这下过滤一下备案号,剩下的不就是我们要的数据了吗

二级页面

点开北京,数据比较少,只有市辖区
20190125140053.png

内蒙的就比较多一点了

20190125140122.png

纯数字的是编码,其他的是名称,也是过滤掉 IPC 备案的就好

三级页面

和二级页面基本一致

20190125140255.png

撸码

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):
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值