首先我得道歉,因为我做了一回标题党。但我想也并没让你失望吧,虽然没有现在成的sql,但亲写的php脚本同样可以生成烫手的sql!

本博客参考中国统计局2017最新数据进行编写的,有必要的话你可以改成对应最新版本即可。

准备:一张表(id,pid,url,level,name)
注意:本脚本默认获取三级,最多可获取到4级,自行调整!由于平台限制,可能得刷新请求大概5次左右才能完全下载完省市区(直接返回空数组,即下载完成)
技术点:运用了递归和正则匹配,特别的名称进行了处理(如:省直辖县级行政区划、市辖区、县),至于数据库看着替换上即可!
以下代码附上:

function curl_get($url){//初始化$curl = curl_init();//设置抓取的urlcurl_setopt($curl, CURLOPT_URL, $url);//设置头文件的信息作为数据流输出curl_setopt($curl, CURLOPT_HEADER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出。curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//执行命令$data = curl_exec($curl);if (curl_errno($curl)) {$curl_error = curl_error($curl);throw new Exception ($curl_error, 0);} else {$httpStatusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);if (200 !== $httpStatusCode) {throw new Exception ($data, $httpStatusCode);}}//关闭URL请求curl_close($curl);//显示获得的数据return $data;
}
function getAddress($url, $pid=0, $level=1, $p_name , $data=array()){try{// 拼接请求链接$html = curl_get($url);// 以下为节点要点字眼,选择自己要的地区等级字眼则可// provincetr|citytr|countytr|towntr|villagetrpreg_match_all('/(provincetr|citytr|countytr).*<td(.*)td/i',$html,$res1);if($res1){$tr = $res1[0][0];preg_match_all('/<td.*?>.*?href=[\'|"](.*?)[\'|"]>(.*?)(<\/br>)?<\/a><\/td/',$tr,$res2);foreach ($res2[2] as $key => $value) {$curll_val = $res2[1][$key];$curll_url = substr($url,0, strrpos($url, '/') + 1) . $curll_val;$select_sql = "select * from test_region where url='{$curll_val}'";$exist = $GLOBALS['db_separate']->getRow($select_sql);// 如果已经存在该父级节点,则跳过if ($exist){continue;}$value = trim(strip_tags($value));if (!is_numeric($value) && !empty($value)) {// 转换成数据库的编码$encode = mb_detect_encoding($value, array('ASCII','UTF-8','GB2312','GBK','BIG5'));// EUC-CN$value = iconv( $encode, 'utf-8',$value);// 湖北仙桃 河南济源 海南五指山 文昌等if($value == '省直辖县级行政区划'){ // 向上推一级$data += getAddress($curll_url, $pid, $level, $value);  // 可选择性去掉} else {// 每个顶级节点做一次事务,从而保障就算出错也不会出现漏数据$level == 1 && $GLOBALS['db_separate']->beginTransaction();// 如果是市辖区或只有县,则用低级名称//县 重庆城口 丰都等if($value == '市辖区' || $value == '县'){ // 替换成上级的名称$value = $p_name;}// 初始保证变量没被污染$sub_pid = '';if($value == '重庆市'){$sql = "select id from test_region where level='{$level}' and region_name='{$value}'";$sub_pid = $GLOBALS['db_separate']->getOne($sql);}if(empty($sub_pid)){$row = array('region_name'=>trim(strip_tags($value)), 'url'=>$curll_val, 'level'=>$level, 'pid'=>$pid);// 向数据库插入一条数据$GLOBALS['db_separate']->insert('test_region', $row);// 把当前的id作为自己子级的父ID$sub_pid = $GLOBALS['db_separate']->lastInsertId();}// 递归查找自己的子级$row['child'] = getAddress($curll_url, $sub_pid, $level +1, $value);$data[] = $row;// 如果该顶节点回调完才会提交自己的事务$level == 1 && $GLOBALS['db_separate']->commit();}}// file_put_contents('res.txt', var_export($data,true));}}}catch (Exception $e){// 如果帮忙错,则回滚事务再刷新当前页,以此来继续操作插入完成未处理的数据echo '出错了哦~' . $e->getMessage();$reload_srcipt = "<script>location.reload()</script>";try{$GLOBALS['db_separate']->rollBack();  // 必须先回滚再刷新echo $reload_srcipt;}catch (Exception $e_sub){echo $reload_srcipt;}}// 返回本次处理过的结果集return $data;
}set_time_limit(0);
$url = 'http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2017/index.html';
$data = getAddress($url);var_dump($data);

php爬虫全国地址信息相关推荐

  1. python爬取全国真实地址_Python3爬虫全国地址信息

    PHP方式写的一团糟所以就用python3重写了一遍,所以因为第二次写了,思路也更清晰了些. 提醒:可能会有502的错误,所以做了异常以及数据库事务处理,暂时没有想到更好的优化方法,所以就先这样吧.待 ...

  2. 全国企业信息网站地址

    全国企业信息网站地址: http://www.gsxt.gov.cn/index.html

  3. 爬虫-豆瓣-2021.7.23-书籍排行榜前30页及每页读者和地址信息

    1.环境 python3.7 pycharm2020.1 2.准备工作 2.1安装lxml 在cmd模式下, pip install lxml 在cmd模式下测试 python import lxml ...

  4. 检测到目标url存在内部ip地址泄露_Cendertron,动态爬虫与敏感信息泄露检测

    Cendertron,动态爬虫与敏感信息泄露检测 Cendertron = Crawler + Rendertron Cendertron https://url.wx-coder.cn/HinPM ...

  5. 优抚系统网盾服务器访问地址,全国优抚信息管理系统(单机版)_区县

    全国优抚信息管理系统 2.1 优抚档案管理 此对话框中包括五个页签,分别是:基本信息.类别信息.生活费来源.医疗和供养方式.住房情况.在各输入框中输入信息后,点击[保存]按钮,提示"保存成功 ...

  6. Python 爬虫 中国行政区划信息爬取 (初学者)

    Python 爬虫 中国行政区划信息爬取 (初学者) 背景 环境准备 代码片段 1.定义地址信息对象 2.地址解析对象 2.1 获取web信息 2.2 web信息解析 2.3 区划信息提取 2.4 省 ...

  7. python全国天气信息爬取

    对应的视频讲解地址请点击:python爬虫实例讲解_哔哩哔哩_bilibilipython爬虫教程,数据信息采集爬取https://www.bilibili.com/video/BV13L4y137Q ...

  8. 基于 Scrapy-Redis 全国房源信息抓取系统

    基于 Scrapy-Redis 全国房源信息抓取系统 摘要 近几年,人们对房源信息的关注度越来越高.如何对全国房源信息进行灵活高效的采集并存储,对全国房源信息的分析工作起到重要作用.文中在分析房天下站 ...

  9. 1分钟爬取全国高校信息,制成大屏可视化!

    记得当初高考完,我选学校的时候是在书店买的高校信息排名的书,然而书中的信息都是很久之前的,并没有什么太大帮助.今天就来带大家爬点真正有用的东西,全国高校信息,涵盖绝大多数高校,并制作可视化看板.话不多 ...

最新文章

  1. 基于thinkphp的省略图便捷函数
  2. 面试官让我讲下线程的TIMED_WAITING状态,我又笑了
  3. php读写xml文件,另辟蹊径 搞定PHP读取XML大文件 数据导入
  4. 初探 RabbitMQ 消息队列
  5. tomcat运行出现问题(Starting Tomcat v8.0 Server at localhost' has encountered a problem.)
  6. Linq实战 之 Linq to Sql及Entity Framework操作详解
  7. 公平的错觉:韩国教育辛酸史
  8. Mac Finder显示/隐藏文件
  9. 牡丹江java奔腾有知道的吗_老转盘道和“奔腾广场”之间,藏着多少个日新月异?...
  10. android-ultra-pull-to-refresh list,Android下拉刷新控件android-Ultra-Pull-To-Refresh 使用
  11. Linux常用命令速查手册——嘎嘎管用
  12. vue+vant仿微信聊天画面做了个点击按钮出现土味情话的界面
  13. 回字的四种写法之编程
  14. 计算机图形学五:几何-Geometry
  15. 基于python的量化投资基础(Chapter.0)——概述
  16. bakaxl启动器怎么导入整合包_bakaxl启动器加mod整合包
  17. 文本分析——分配单词权重
  18. 资料随意收集(1):Lotus Notes常见问题解决办法(实用--转帖)
  19. Leaflet + eegeo.js 构建三维世界
  20. requests 标红 InsecureRequestWarning: Unverified HTTPS request is being made to host

热门文章

  1. python 计算DataFrame的数值变量及离散变量,并标准化
  2. DPLink: User Identity Linkage via Deep Neural Network From Heterogeneous Mobility Data 阅读笔记
  3. SC16IS750芯片SPI转串口
  4. 视频信号 | 双绞线视频传输器
  5. JavaScript系列之— 常见的Number 对象汇总
  6. 剪辑歌曲,哪个音乐剪辑软件操作简单
  7. spring+JdbcTemplate简单使用(一)
  8. hpux- hp superdome9000 日常硬件故障处理总结
  9. Android-UI-绘制请求与绘制时机
  10. 2020煤矿采煤机(掘进机)操作模拟考试及煤矿采煤机(掘进机)操作复审模拟考试