areacode是用于抓取国家统计局地址数据的爬虫程序,日常项目中很多地方都需要用到地址数据,目前全国地址数据由国家统计局发布,包含:省,市/州,区县,乡镇,村等5个级别数据,共计60多万条(因地区合并等原因,每年数据均不等)。
程序由Python编写,推荐使用Python3
- 安装依赖
pip3 install requests
pip3 install bs4
- 配置数据年份
请将spiders.py文件中的29行dataYear改成需要抓取的年份。
#数据年份
dataYear=2021
- 保存的文件
最后生成的SQL insert语句保存的文件名及路径位于当前目录下的data目录中,默认文件为:areacode2021-all.sql,其中年份为数据年份dataYear参数。
- 运行
python3 spiders.py
#指定年份
python3 spiders.py -y 2021
#只爬取省、市州、区县三个级别数据
python3 spiders.py -s 2021
- 显示帮助
python3 spiders.py -?
可以通过命令查看:
python3 spiders.py -sql
指定年份:
python3 spiders.py -sql 2021
- MySQL数据库建表语句为:
CREATE TABLE IF NOT EXISTS areacode2021 (
code varchar(12) PRIMARY KEY NOT NULL COMMENT '地址code',
area_name varchar(255) DEFAULT '' COMMENT '名字',
type int COMMENT '级别,1:省,2:市/州,3区县,4乡镇,5村',
parent_code varchar(12) COMMENT '父级code ',
KEY `areacode_index` (`parent_code`)
) DEFAULT CHARSET=utf8 COMMENT='地址表2021';
- PostgreSQL数据库建表语句为:
CREATE TABLE if not exists public.areacode2021 (
code varchar(12) NULL,
area_name text NULL,
"type" integer NULL,
parent_code varchar(12) NULL,
CONSTRAINT areacode2021_pk PRIMARY KEY (code)
);
CREATE INDEX areacode2021_parent_code_idx ON public.areacode2021 (parent_code);
CREATE INDEX areacode2020_type_idx ON public.areacode2021 ("type");
COMMENT ON TABLE public.areacode2021 IS '地址表2021';
COMMENT ON COLUMN public.areacode2021.code IS '地址code';
COMMENT ON COLUMN public.areacode2021.area_name IS '名字';
COMMENT ON COLUMN public.areacode2021."type" IS '级别,1:省,2:市/州,3区县,4乡镇,5村';
COMMENT ON COLUMN public.areacode2021.parent_code IS '父级code';